由于时间没赶上摸底,只能跟一波新增的dp摸底,感觉难度一般般,可能有段时间内没做题的缘故吧
暑训就要开始了呢
A 黑白棋
思路:一上来就是个博弈搜索
根据上一状态与这一状态必胜必败态的转换来判断先手的情况
dfs搜索所有前项状态,若均为必败态,则该状态为必胜态,否则为必败态
/*
Author:Owen_Q
*/
#include <bits/stdc++.h>
using namespace std;
int a[5][5];
int dfs(int x,int y)
{
int next[2][4]={
{0,0,1,-1},{1,-1,0,0}};
int x1,y1,i,p=1;
for(i=0;i<4&&p==1;i++)
{
x1=x+next[0][i];
y1=y+next[1][i];
if(x1>=0&&y1>=0&&x1<5&&y1<5&&a[x1][y1]==0)
{
a[x1][y1]=1;
p=(dfs(x1,y1)+1)%2;
a[x1][y1]=0;
}
}
return p;
}
int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
scanf("%1d",&a[i][j]);
}
}
int p=0;
for(i=0;i<5&&p==0;i++)
{
for(j=0;j<5&&p==0;j++)
{
if(a[i][j]==0)
{
a[i][j]=1;
p=dfs(i,j);
a[i][j]=0;
}
}
}
if(p==0)
printf("lose\n");
else
printf("win\n");
}
return 0;
}