Submission #4021083


Source Code Expand

#include <iostream>
#include <map>
using namespace std;

int B[3][3],C[3][3],pow[10] = {1};
map<int,int> dp;

int code(int A[][3]){
	int res = 0;
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			res += A[i][j]*pow[i*3+j];
		}
	}
	return res;
}

bool end(int A[][3]){
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			if(A[i][j]==0) return false;
		}
	}
	return true;
}

int rec(int A[][3],int c){
	int num = code(A);
	int score = 0,score1 = -1e9,score2 = 1e9;
	if(dp.count(num)) return dp[num];
	if(end(A)){
		for(int i=0;i<2;i++){
			for(int j=0;j<3;j++){
				if(A[i][j]==A[i+1][j]) score += B[i][j];
			}
		}
		for(int i=0;i<3;i++){
			for(int j=0;j<2;j++){
				if(A[i][j]==A[i][j+1]) score += C[i][j];
			}
		}
		return score;
	}
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			if(A[i][j]==0){
				if(c==0){
					A[i][j] = 1;
					score1 = max(score1,rec(A,1));
					A[i][j] = 0;
				}else{
					A[i][j] = 2;
					score2 = min(score2,rec(A,0));
					A[i][j] = 0;
				}
			}
		}
	}
	if(c==0){
		dp[num] = score1;
		return score1;
	}
	else{
		dp[num] = score2;
		score2;
	}
}

int main(){
	int sum = 0;
	for(int i=0;i<2;i++){
		for(int j=0;j<3;j++){
			cin >> B[i][j];
			sum += B[i][j];
		}
	}
	for(int i=0;i<3;i++){
		for(int j=0;j<2;j++){
			cin >> C[i][j];
			sum += C[i][j];
		}
	}
	for(int i=1;i<=9;i++) pow[i] = 3*pow[i-1];
	int A[3][3] = {};
	int ans = rec(A,0);
	cout << ans << endl;
	cout << sum-ans << endl;
}

Submission Info

Submission Time
Task C - 双子と○×ゲーム
User idsigma
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1511 Byte
Status AC
Exec Time 5 ms
Memory 512 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 5 ms 512 KB
sample-02.txt AC 5 ms 512 KB
test-01.txt AC 5 ms 512 KB
test-02.txt AC 5 ms 512 KB
test-03.txt AC 5 ms 512 KB
test-04.txt AC 5 ms 512 KB
test-05.txt AC 5 ms 512 KB
test-06.txt AC 5 ms 512 KB
test-07.txt AC 5 ms 512 KB
test-08.txt AC 5 ms 512 KB
test-09.txt AC 5 ms 512 KB
test-10.txt AC 5 ms 512 KB
test-11.txt AC 5 ms 512 KB
test-12.txt AC 5 ms 512 KB
test-13.txt AC 5 ms 512 KB
test-14.txt AC 5 ms 512 KB
test-15.txt AC 5 ms 512 KB
test-16.txt AC 5 ms 512 KB
test-17.txt AC 5 ms 512 KB
test-18.txt AC 5 ms 512 KB
test-19.txt AC 5 ms 512 KB
test-20.txt AC 5 ms 512 KB