Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
坑爹啊!!不是搜索吗?why wa。。#include<iostream> #include<vector> #include<algorithm> #include<cstdio> #include<queue> #include<stack> #include<string> #include<map> #include<set> #include<cmath> #include<cassert> #include<cstring> #include<iomanip> using namespace std; #define FOR(i,a,b) for( int i = (a) ; i <= (b) ; i ++) #define FF(i,a) for( int i = 0 ; i < (a) ; i ++) #define FFD(i,a) for( int i = (a)-1 ; i >= 0 ; i --) #define S64(a) scanf(in64,&a) #define SS(a) scanf("%d",&a) #define LL(a) ((a)<<1) #define RR(a) (((a)<<1)+1) #define pb push_back #define CL(Q) while(!Q.empty())Q.pop() #define MM(name,what) memset(name,what,sizeof(name)) #define read freopen("in.txt","r",stdin) #define write freopen("out.txt","w",stdout) const int inf = 0x3f3f3f3f; const i64 inf64 = 0x3f3f3f3f3f3f3f3fLL; const double oo = 10e9; const double eps = 1e-10; const double pi = acos(-1.0); char a[6][6]; string s; int sx,sy; int num(int x,int y) { return (x-1)*4+y; } bool you(int x,int temp) { return (x&(1<<temp)); } bool win(int x) { int temp; bool ok; for(int u=1;u<=4;u++) { ok = true; for(int k=1;k<=4;k++) { temp = num(u,k); if(!you(x,temp)) { ok = false; break; } } if(ok) return true; } for(int k=1;k<=4;k++) { ok = true; for(int u=1;u<=4;u++) { temp = num(u,k); if(!you(x,temp)) { ok = false; break; } } if(ok) return true; } ok = true; for(int u=1;u<=4;u++) { temp = num(u,u); if(!you(x,temp)) { ok = false; break; } } if(ok) return true; ok = true; for(int u=1;u<=4;u++) { temp = num(5-u,u); if(!you(x,temp)) { ok = false; break; } } if(ok) return true; return false; } bool dfwin(int step,int x,int y) { if(win(x)) return true; if(win(y)) return false; if(step == 17) return false; if(step%2) { for(int u=1;u<=16;u++) { if(!you(x,u) && !you(y,u)) { if(dfwin(step+1,x+(1<<u),y)) { return true; } } } return false; } else { for(int u=1;u<=16;u++) { if(!you(x,u) && !you(y,u)) { if(!dfwin(step+1,x,y+(1<<u))) { return false; } } } return true; } } bool dflose(int step,int x,int y) { if(win(x)) return false; if(win(y)) return true; if(step == 17) return false; if(step%2) { for(int u=1;u<=16;u++) { if(!you(x,u) && !you(y,u)) { if(dflose(step+1,x+(1<<u),y)) { return true; } } } return false; } else { for(int u=1;u<=16;u++) { if(!you(x,u)&&!you(y,u)) { if(!dflose(step+1,x,y+(1<<u))) { return false; } } } return true; } } bool cap(int step,int x,int y) { if(win(x) || win(y)) return false; if(step == 17) return true; if(step%2) { for(int u=1;u<=16;u++) { if(!you(x,u) && !you(y,u)) { if(cap(step+1,x+(1<<u),y)) { return true; } } } return false; } else { for(int u=1;u<=16;u++) { if(!you(x,u) && !you(y,u)) { if(!cap(step+1,x,y+(1<<u))) { return false; } } } return true; } } bool start() { int temp; int x,y; x = 0; y = 0; for(int u=1;u<=4;u++) { for(int k=1;k<=4;k++) { if(a[u][k]=='x') { temp = num(u,k); x |= 1<<temp; } else if(a[u][k] == 'o') { temp = num(u,k); y |= 1<<temp; } } } int step = sx+sy+1; if(s=="LOSE") { return dflose(step,x,y); } else if(s=="WIN") { return dfwin(step,x,y); } else if(s=="TIE") { return cap(step,x,y); } } int main() { int T; cin>>T; while(T--) { cin>>s; sx =0; sy= 0; for(int i=1;i<=4;i++) { for(int j=1;j<=4;j++) { cin>>a[i][j]; if(a[i][j]=='x') { sx++; } else if(a[i][j]=='o') { sy++; } } } if(start()) { cout<<"YES"<<endl; } else { cout<<"NO"<<endl; } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator