记录一个菜逼的成长。。
题目大意:
有一个4*4的图,先手画’x’,后手画’o’,谁先满足在对角线或者横线或竖线上有三个连续的标记,则这个人获胜。
问在这个图上画一个’x’标记,是否可以获胜。
直接暴力模拟这个过程即可。对角线两条,横线一条,竖线一条
#include <bits/stdc++.h>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define mp make_pair
#define lowbit(x) (x)&(-x)
typedef long long LL;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int maxn = 100 + 10;
char g[5][5];
char s[] = {'x','o'};
bool check(int x,int y,int a)
{
int cnt = 1;
for( int i = y - 1; i > 0 && g[x][i] == s[a]; i-- )cnt++;
for( int i = y + 1; i <= 4 && g[x][i] == s[a]; i++ )cnt++;
if(cnt >= 3)return true;
cnt = 1;
for( int i = x-1; i > 0 && g[i][y] == s[a]; i-- )cnt++;
for( int i = x+1; i <= 4 && g[i][y] == s[a]; i++ )cnt++;
if(cnt >= 3)return true;
cnt = 1;
for( int i = 1; x-i > 0 && y-i > 0 && g[x-i][y-i] == s[a]; i++ )cnt++;
for( int i = 1; x+i <= 4 && y+i <= 4 && g[x+i][y+i] == s[a]; i++ )cnt++;
if(cnt >= 3)return true;
cnt = 1;
for( int i = 1; x-i > 0 && y+i <= 4 && g[x-i][y+i] == s[a]; i++ )cnt++;
for( int i = 1; x+i <= 4 && y-i > 0 && g[x+i][y-i] == s[a]; i++)cnt++;
if(cnt >= 3)return true;
return false;
}
int main()
{
for( int i = 1; i <= 4; i++ ){
scanf("%s",g[i]+1);
}
int flag = 0;
for( int i = 1; i <= 4; i++ ){
for( int j = 1; j <= 4; j++ ){
if(g[i][j] == '.' && check(i,j,0)){
flag = 1;
break;
}
}
if(flag)break;
}
if(flag)puts("YES");
else puts("NO");
return 0;
}