1891: kotomi and game Time Limit:1 Sec Memory Limit:128 MB [ Submit ][ Status ][ Web Board ] Description kotomi最近有点累,于是想玩个游戏。 kotomi九宫格玩腻了,于是想玩十六宫格
1891: kotomi and game
Time Limit: 1 Sec
Memory Limit: 128 MB
[Submit][Status][Web Board]
Description
kotomi最近有点累,于是想玩个游戏。
kotomi九宫格玩腻了,于是想玩十六宫格。
只要满足横或竖或对角线上有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
【分析】
暴力模拟一下就好了...对每个'.'寻找它的周围能不能组成3个'x',情况考虑完全就可以了,要注意有一种情况是'.'在中间比如,'x.x'
【代码】
#include <stdio.h>
char a[10][10];
int find(int i,int j)
{
if (a[i+1][j]=='x' && a[i+2][j]=='x') return 1;
if (a[i][j+1]=='x' && a[i][j+2]=='x') return 1;
if (i>2 && a[i-1][j]=='x' && a[i-2][j]=='x') return 1;
if (j>2 && a[i][j-1]=='x' && a[i][j-2]=='x') return 1;
if (a[i-1][j]=='x' && a[i+1][j]=='x') return 1;
if (a[i][j-1]=='x' && a[i][j+1]=='x') return 1;
if (a[i-1][j+1]=='x' && a[i+1][j-1]=='x') return 1;
if (a[i-1][j-1]=='x' && a[i+1][j+1]=='x') return 1;
if (i>2 && j>2 && a[i-1][j-1]=='x' && a[i-2][j-2]=='x') return 1;
if (a[i+1][j+1]=='x' && a[i+2][j+2]=='x') return 1;
if (j>2 && a[i+1][j-1]=='x' && a[i+2][j-2]=='x') return 1;
if (i>2 && a[i-1][j+1]=='x' && a[i-2][j+2]=='x') return 1;
return 0;
}
int main()
{
int pp;scanf("%d",&pp);
char f[10];
for (int i=0;i<7;i++) a[i][6]=a[6][i]=a[i][0]=a[i][5]=a[0][i]=a[5][i]='o';
while (pp--)
{
getchar();
for (int i=1;i<5;i++)
{
scanf("%s",f);
for (int j=0;j<4;j++)
a[i][j+1]=f[j];
}
for (int i=1;i<5;i++)
for (int j=1;j<5;j++)
if (a[i][j]=='.')
if (find(i,j))
{
printf("yes\n");
goto out;
}
printf("no\n");
out:;
}
return 0;
}