Submission #2199634


Source Code Expand

#include<vector>
#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
#include<map>
#include<functional>
#include<queue>
#include<stack>
#include<string.h>
#include<list>
#include<limits>
#include<bitset>
#include<ctype.h>
#include<set>
using namespace std;
typedef long long int ll;
typedef pair<int,int> P;
const ll MOD=1000000007LL;
const ll INF=1000000000;
const int MAX=100001;
const double EPS=1e-10;
int b[2][3];
int c[3][2];
int m[3][3];
P dfs(int x,int y,int t){
    if(x!=-1){
        m[x][y]=t;
    }
    bool f=false;
    P ret;
    if(t==1){
        ret={0,INF};
    }else{
        ret={INF,0};
    }   
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(i==x&&j==y){
                continue;
            }
            if(m[i][j]==0){
                int sa=ret.first-ret.second;
                if(t==1){
                    P p=dfs(i,j,2);
                    int sa2=p.first-p.second;
                    if(sa<sa2){
                        ret=p;
                    }
                }else{
                    P p=dfs(i,j,1);
                    int sa2=p.first-p.second;
                    if(sa>sa2){
                        ret=p;
                    }
                }
                f=true;
            }
        }
    }
    if(!f){
        ret={0,0};
        for(int i=0;i<2;i++){
            for(int j=0;j<3;j++){
                if(m[i][j]==m[i+1][j]){
                    ret.first+=b[i][j];
                }else{
                    ret.second+=b[i][j];
                }
            }
        }
        for(int i=0;i<3;i++){
            for(int j=0;j<2;j++){
                if(m[i][j]==m[i][j+1]){
                    ret.first+=c[i][j];
                }else{
                    ret.second+=c[i][j];
                }
            }
        }
    }
    m[x][y]=0;  
    return ret;
}
int main(){
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            m[i][j]=0;
        }
    }
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++){
            cin>>b[i][j];
        }
    }
    for(int i=0;i<3;i++){
        for(int j=0;j<2;j++){
            cin>>c[i][j];
        }
    }
    P ans=dfs(-1,-1,1);
    cout<<ans.first<<endl;
    cout<<ans.second<<endl;
    return 0;
}

Submission Info

Submission Time
Task C - 双子と○×ゲーム
User TAISA_
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2362 Byte
Status AC
Exec Time 57 ms
Memory 256 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 2
AC × 24
Set Name Test Cases
Sample sample-01.txt, sample-02.txt
All sample-01.txt, sample-02.txt, test-01.txt, test-02.txt, test-03.txt, test-04.txt, test-05.txt, test-06.txt, test-07.txt, test-08.txt, test-09.txt, test-10.txt, test-11.txt, test-12.txt, test-13.txt, test-14.txt, test-15.txt, test-16.txt, test-17.txt, test-18.txt, test-19.txt, test-20.txt, sample-01.txt, sample-02.txt
Case Name Status Exec Time Memory
sample-01.txt AC 56 ms 256 KB
sample-02.txt AC 56 ms 256 KB
test-01.txt AC 56 ms 256 KB
test-02.txt AC 56 ms 256 KB
test-03.txt AC 56 ms 256 KB
test-04.txt AC 56 ms 256 KB
test-05.txt AC 56 ms 256 KB
test-06.txt AC 56 ms 256 KB
test-07.txt AC 56 ms 256 KB
test-08.txt AC 56 ms 256 KB
test-09.txt AC 56 ms 256 KB
test-10.txt AC 56 ms 256 KB
test-11.txt AC 56 ms 256 KB
test-12.txt AC 56 ms 256 KB
test-13.txt AC 56 ms 256 KB
test-14.txt AC 56 ms 256 KB
test-15.txt AC 56 ms 256 KB
test-16.txt AC 57 ms 256 KB
test-17.txt AC 56 ms 256 KB
test-18.txt AC 56 ms 256 KB
test-19.txt AC 56 ms 256 KB
test-20.txt AC 56 ms 256 KB