| ||||||||||
| 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