求调今晚 AT_abc_e
  • 板块学术版
  • 楼主mayike
  • 当前回复11
  • 已保存回复11
  • 发布时间2024/4/13 22:20
  • 上次更新2024/4/14 09:15:57
查看原帖
求调今晚 AT_abc_e
1039406
mayike楼主2024/4/13 22:20
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[4][4],vis[4][4],tj;
int dsb(){
	for(int i=1;i<=3;i++)
		if(vis[i][1]==vis[i][2]&&vis[i][2]==vis[i][3]&&vis[i][1])return vis[i][1];
	for(int i=1;i<=3;i++)
		if(vis[1][i]==vis[2][i]&&vis[2][i]==vis[3][i]&&vis[1][i])return vis[1][i];
	if(vis[1][1]==vis[2][2]&&vis[2][2]==vis[3][3]&&vis[1][1])return vis[1][1];
	if(vis[1][3]&&vis[1][3]==vis[2][2]&&vis[2][2]==vis[3][1])return vis[1][3];
	return 0;
}
int dfs(int cnt){
	if(dsb()!=0)return cnt%2==1?LONG_LONG_MIN:LONG_LONG_MAX;
	if(cnt==9){
		int sum=0;
		for(int i=1;i<=3;i++)
			for(int j=1;j<=3;j++)
				if(vis[i][j]==1)sum+=a[i][j];
		return sum;
	}
	int s=LONG_LONG_MAX;
	if(cnt%2==0){
		s=LONG_LONG_MIN;
		for(int i=1;i<=3;i++)
			for(int j=1;j<=3;j++){
			if(vis[i][j])continue;
			vis[i][j]=1;
		    int ab=dfs(cnt+1);
			if(ab!=LONG_LONG_MAX)s=max(s,ab);
			vis[i][j]=0;
		}
	}else{
		for(int i=1;i<=3;i++)
			for(int j=1;j<=3;j++){
			if(vis[i][j])continue;
			vis[i][j]=-1;
			int ab=dfs(cnt+1);
			if(ab!=LONG_LONG_MIN)s=min(s,ab);
			vis[i][j]=0;
		}
	}return s;
}
signed main(){
	for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)cin>>a[i][j],tj+=a[i][j];
	int ans=dfs(0);
	if(ans>tj-ans)cout<<"Takahashi";
	else cout<<"Aoki";
	return 0;
}

AC 26 个点,WA 6 个点

2024/4/13 22:20
加载中...