codeforces B

来源:互联网 发布:淘宝助理5.8.3 编辑:程序博客网 时间:2024/04/26 05:07

题意:给一个五子棋布局,判断X棋手下一步是否能获胜。

思路:选一个空白处行扫,列扫。对角线扫,扫到4个子就能获胜

#include<cstdio>using namespace std;char a[15][15];int flag;bool solve(int x,int y,int cnt,int e){int cnt1,cnt2,cnt3,cnt4;cnt1=cnt2=cnt3=cnt4=0;for(int i=x+1;i<10&&cnt1<4&&a[i][y]=='X';i++)cnt1++;for(int i=x-1;i>=0&&cnt1<4&&a[i][y]=='X';i--) // 左右两边 cnt1++;for(int i=y+1;i<=10&&cnt2<4&&a[x][i]=='X';i++)  //上下 cnt2++;for(int i=y-1;i>=0&&cnt2<4&&a[x][i]=='X';i--)cnt2++;for(int i=x-1,j=y-1;x>=0&&y>=0&&cnt3<4&&a[i][j]=='X';i--,j--)//主对角 cnt3++;for(int i=x+1,j=y+1;x<10&&y<10&&cnt3<4&&a[i][j]=='X';i++,j++)cnt3++;for(int i=x-1,j=y+1;x>=0&&y<10&&cnt4<4&&a[i][j]=='X';i--,j++)//副对角 cnt4++;for(int i=x+1,j=y-1;x<10&&y>=0&&cnt4<4&&a[i][j]=='X';i++,j--)cnt4++;if(cnt1==4||cnt2==4||cnt3==4||cnt4==4)return 1;else return 0;}int main(){//freopen("in.txt","r",stdin);for(int i=0;i<10;i++)scanf("%s",a[i]);flag=0;for(int i=0;i<10;i++){for(int j=0;j<10;j++)if(a[i][j]=='.'){if(solve(i,j,0,0))flag=1;}}if(flag)printf("YES\n");elseprintf("NO\n");}