L - Tic-Tac-Toe FZU - 2283 (思维)

题目链接:

L - Tic-Tac-Toe

 FZU - 2283 

题目大意:两个人下棋,一共是三步棋,第一个人下一步,第二个人下一步,第三个人下一步,然后问你在两个人在都足够聪明的条件下,第一个人能否获胜?(获胜的前提,其中一个人的三个棋子连成了一条线)。

 参考博客:

Tic-Tac-Toe FZU - 2283 (暴力) - CSDN博客

具体思路:首先必胜态一共有两种情况,一行一共有三个,存在一行有两个是第一个人的棋子,另外一个是空格,这种情况下第一个人必胜。

第二个情况,存在相交的两行,这两行都满足有一个是第一个人的棋子,剩余的两个为空格,这样也是满足的。

AC代码:

  1 #include<iostream>
  2 #include<string>
  3 #include<stdio.h>
  4 using namespace std;
  5 # define ll long long
  6 # define inf 0x3f3f3f3f
  7 const int maxn =2e5+100;
  8 char a[5][5];
  9 char u;
 10 bool judge(int x,int y)
 11 {
 12     int flag1=0,flag2=0;
 13     int t1=0, t2=0;
 14     for(int i=1; i<=3; i++)
 15     {
 16         if(a[x][i]=='.')
 17             t1++;
 18         if(a[x][i]==u)
 19             t2++;
 20     }
 21     if(t1==1&&t2==2)
 22         flag1++;
 23     if(t1==2&&t2==1)
 24         flag2++;
 25     t1=0,t2=0;
 26     for(int i=1; i<=3; i++)
 27     {
 28         if(a[i][y]=='.')
 29             t1++;
 30         if(a[i][y]==u)
 31             t2++;
 32     }
 33     if(t1==1&&t2==2)
 34         flag1++;
 35     if(t1==2&&t2==1)
 36         flag2++;
 37     if(x==y)
 38     {
 39         t1=0,t2=0;
 40         for(int i=1; i<=3; i++)
 41         {
 42             if(a[i][i]=='.')
 43                 t1++;
 44             if(a[i][i]==u)
 45                 t2++;
 46         }
 47         if(t1==1&&t2==2)
 48             flag1++;
 49         if(t1==2&&t2==1)
 50             flag2++;
 51     }
 52     if(x+y==4)
 53     {
 54         t1=0,t2=0;
 55         for(int i=1; i<=3; i++)
 56         {
 57             if(a[i][3+1-i]=='.')
 58                 t1++;
 59             if(a[i][4-i]==u)
 60                 t2++;
 61         }
 62         if(t1==1&&t2==2)
 63             flag1++;
 64         if(t1==2&&t2==1)
 65             flag2++;
 66     }
 67     return flag1>=1|| flag2>=2;
 68 }
 69 int main()
 70 {
 71     int T;
 72     scanf("%d",&T);
 73     while(T--)
 74     {
 75         for(int i=1; i<=3; i++)
 76         {
 77             for(int j=1; j<=3; j++)
 78             {
 79                 scanf(" %c",&a[i][j]);
 80             }
 81         }
 82         int flag=0;
 83         scanf(" %c",&u);
 84         for(int i=1; i<=3; i++)
 85         {
 86             for(int j=1; j<=3; j++)
 87             {
 88                 if(judge(i,j))
 89                 {
 90                     flag=1;
 91                     break;
 92                 }
 93             }
 94             if(flag)
 95                 break;
 96         }
 97         if(flag)
 98             printf("Kim win!\n");
 99         else
100             printf("Cannot win!\n");
101     }
102     return 0;
103 }

 

posted @ 2019-04-12 16:48  Let_Life_Stop  阅读(424)  评论(0编辑  收藏  举报