Ural 1195 Ouths and Crosses
2013-08-07 12:16
330 查看
Ural 1195
题目大意就是给定一个3X3的格子
问其状态是否是必胜态。
因为数据量小的可怜,我们直接暴力搜索就可以搞定。
CODE:
题目大意就是给定一个3X3的格子
问其状态是否是必胜态。
因为数据量小的可怜,我们直接暴力搜索就可以搞定。
CODE:
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<set> #include<queue> #include<map> #include<sstream> #include<iostream> using namespace std; #define FOR(i,a,b) for(int (i)=(a);(i)<=(b);(i)++) #define DOR(i,a,b) for(int (i)=(a);(i)>=(b);(i)--) #define bug puts("Fuck"); #define LL long long #define pb push_back #define mp make_pair #define nMax 4 #define eps 1e-8 #define inf 0x7fffffff void cc(int a[][nMax],int b[][nMax]){ for(int i=0;i<3;i++) for(int j=0;j<3;j++) a[i][j]=b[i][j]; } int check(int s[nMax][nMax]){ int op=-1; for(int i=0;i<3;i++) if(s[i][0]==s[i][1] && s[i][1]==s[i][2]) {op=s[i][1];break;} for(int j=0;j<3;j++) if(s[0][j]==s[1][j] && s[1][j]==s[2][j]) {op=s[1][j];break;} if(s[0][0]==s[1][1] && s[1][1]==s[2][2]) op=s[0][0]; if(s[0][2]==s[1][1] && s[1][1]==s[2][0]) op=s[1][1]; if(op!=-1) return op; for(int i=0;i<3;i++) for(int j=0;j<3;j++) if(s[i][j]==-1) return op; return -2; } int Win(int s[nMax][nMax],int cur){ int op=check(s); if(op>=0) return op==cur; if(op==-2) return -1; int b[nMax][nMax]; cc(b,s); int ok=0; for(int i=0;i<3;i++)for(int j=0;j<3;j++) if(b[i][j]==-1){ b[i][j]=cur; int nxt = Win(b,cur^1); if(nxt==0) return 1; if(nxt==-1) ok=1; b[i][j]=-1; } if(ok) return -1; return 0; } int main(){ #ifndef ONLINE_JUDGE // freopen("input.txt","r",stdin); // freopen("output.txt","w",stdout); #endif char s[nMax][nMax]; int a[nMax][nMax]; for(int i=0;i<3;i++) scanf("%s",s[i]); int C=0,O=0; for(int i=0;i<3;i++) for(int j=0;j<3;j++) { if(s[i][j]=='X') a[i][j]=0; if(s[i][j]=='O') a[i][j]=1; if(s[i][j]=='#') a[i][j]=-1; if(a[i][j]==0) C++; if(a[i][j]==1) O++; } int ans; if(C<=O) ans = Win(a,0); else ans = Win(a,1); if(ans == 1) printf("%s\n",C<=O?"Crosses win":"Ouths win"); else if(ans==0) printf("%s\n",C<=O?"Ouths win":"Crosses win"); else printf("Draw\n"); return 0; }
相关文章推荐
- ural 1907 Coffee and Buns
- URAL 1216 Two Pawns and One King
- URAL 1750 Pakhom and the Gully 计算几何+floyd
- POJ.3537.Crosses and Crosses(博弈论 Mult-SG)
- akoj-1195-Good luck and have fun
- URAL 2019 Pair: normal and paranormal (贪心) -GDUT联合第七场
- 【ural】1960. Palindromes and Super Abilities【Palindromic Tree】
- URAL 1553 Caves and Tunnels(树链剖分-点更新-区间最值查)
- URAL1635——DP+回溯——Mnemonics and Palindromes
- URAL 2040 Palindromes and Super Abilities 2(回文树)
- Ural 2040 Palindromes and Super Abilities 2
- Ural2040:Palindromes and Super Abilities(离线&manecher算法)
- POJ-3537 Crosses and Crosses (博弈, SG函数)
- URAL 1750 Pakhom and the Gully 计算几何+floyd
- URAL 1960 Palindromes and Super Abilities (回文树)
- POJ 3537 Crosses and Crosses
- [poj 3537]Crosses and Crosses(博弈论)
- URAL 2040 Palindromes and Super Abilities 2(回文树)
- URAL1960 Palindromes and Super Abilities
- [Multi-SG] POJ 3537 Crosses and Crosses & BZOJ 2940 [Poi2000]条纹