Description
kotomi最近有点累,于是想玩个游戏。
kotomi九宫格玩腻了,于是想玩十六宫格。
现在kotomi要画一个’x’使得横或竖或对角线上有3个连续的’x’就获胜。
只能画在’.'上。
Input
输入第一行包含一个整数T(1 <= T <= 10)
接下来包含4*4矩阵,矩阵只包含’x’,’.’,‘o’.
Output
如果能获胜则输出"yes",否则输出"no"
Sample Input
4
xx…
.oo.
x…
oox.
x.ox
ox…
x.o.
oo.x
x…x
…oo
o…
x.xo
o.x.
o…
.x…
ooxx
Sample Output
yes
no
yes
no
暴力模拟,干就完事了
#include<bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
#define ll long long
#define mem(a) memset(a,0,sizeof(a))
char s[5][5];
int jud(char a, char b, char c)
{
int ju = 0;
int xx = 0;
int yy = 0;
if(a=='x') xx++;
if(b=='x') xx++;
if(c=='x') xx++;
if(a=='.') yy++;
if(b=='.') yy++;
if(c=='.') yy++;
if(xx==2&&yy==1) ju = 1;
return ju;
}
int dfs()
{
int flag = 0;
//横着连续三个
if(jud(s[0][0],s[0][1],s[0][2])==1) flag = 1;
if(jud(s[0][3],s[0][1],s[0][2])==1) flag = 1;
if(jud(s[1][0],s[1][1],s[1][2])==1) flag = 1;
if(jud(s[1][3],s[1][1],s[1][2])==1) flag = 1;
if(jud(s[2][0],s[2][1],s[2][2])==1) flag = 1;
if(jud(s[2][3],s[2][1],s[2][2])==1) flag = 1;
if(jud(s[3][0],s[3][1],s[3][2])==1) flag = 1;
if(jud(s[3][3],s[3][1],s[3][2])==1) flag = 1;
//竖着连续三个
if(jud(s[1][0],s[2][0],s[3][0])==1) flag = 1;
if(jud(s[1][0],s[2][0],s[0][0])==1) flag = 1;
if(jud(s[1][1],s[2][1],s[3][1])==1) flag = 1;
if(jud(s[1][1],s[2][1],s[0][1])==1) flag = 1;
if(jud(s[1][2],s[2][2],s[3][2])==1) flag = 1;
if(jud(s[1][2],s[2][2],s[0][2])==1) flag = 1;
if(jud(s[1][3],s[2][3],s[3][3])==1) flag = 1;
if(jud(s[1][3],s[2][3],s[0][3])==1) flag = 1;
//斜着连续三个
if(jud(s[0][0],s[1][1],s[2][2])==1) flag = 1;
if(jud(s[1][1],s[2][2],s[3][3])==1) flag = 1;
if(jud(s[0][3],s[1][2],s[2][1])==1) flag = 1;
if(jud(s[1][2],s[2][1],s[3][0])==1) flag = 1;
if(jud(s[2][0],s[1][1],s[0][2])==1) flag = 1;
if(jud(s[1][0],s[2][1],s[3][2])==1) flag = 1;
if(jud(s[0][1],s[1][2],s[2][3])==1) flag = 1;
if(jud(s[1][3],s[2][2],s[3][1])==1) flag = 1;
return flag;
}
int main()
{
int t;
scanf("%d", &t);
while(t--){
for(int i = 0; i < 4; i++){
scanf("%s", s[i]);
}
int p = dfs();
if(p==1){
printf("yes\n");
}else{
printf("no\n");
}
}
return 0;
}