Tic-Tac-Toe-(暴力模拟)

https://ac.nowcoder.com/acm/contest/847/B

#include<algorithm>
#include<cstring>
#include<iostream>
#include<math.h>
#include<string>
#include<stdio.h>
#include<map>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;

char a[3][5];
int t;

bool check()
{
    int num1=0,num2=0;///白子数,空位数
    for(int i=0;i<3;i++)///横的
    {
        num1=0;num2=0;
        for(int j=0;j<3;j++)
        {
            if( a[i][j]=='W' )
                num1++;
            else if( a[i][j]=='#' )
                num2++;
            else
                break;
        }
        if(num1==2 && num2==1)
            return true;
    }

    for(int j=0;j<3;j++)///竖的
    {
        num1=num2=0;
        for(int i=0;i<3;i++)
        {
            if( a[i][j]=='W' )
                num1++;
            else if( a[i][j]=='#' )
                num2++;
            else
                break;
        }
        if(num1==2 && num2==1)
            return true;
    }
    num1=num2=0;
    for(int i=0;i<3;i++)///左上到左下
    {
        if( a[i][i]=='W' )
               num1++;
        else if( a[i][i]=='#' )
            num2++;
        else
            break;
    }
    if(num1==2 && num2==1)
        return true;
    num1=num2=0;
    for(int i=0;i<3;i++)///左下到右上
    {
        if(i==0)
        {
            if( a[2][0]=='W' )
                num1++;
            else if( a[2][0]=='#' )
                num2++;
            else if( a[2][0]=='B')
                break;
        }
        if(i==1)
        {
            if( a[1][1]=='W' )
                num1++;
            else if( a[1][1]=='#' )
                num2++;
            else if( a[1][1]=='B')
                break;
        }
        if(i==2)
        {
            if( a[0][2]=='W' )
                num1++;
            else if( a[0][2]=='#' )
                num2++;
            else if( a[0][2]=='B')
                break;
        }
    }
    if(num1==2 && num2==1)
        return true;
    return false;
}


int main()
{
    scanf("%d",&t);
    while(t--)
    {
        int flag;
        flag=0;
        for(int i=0;i<3;i++)
            scanf("%s",a[i]);
        if(check())///正常情况下一步能赢
        {
            for(int i=0;i<3&&flag==0;i++)
            {
                for(int j=0;j<3&&flag==0;j++)
                {
                    if( a[i][j]=='W' )
                    {
                        a[i][j]='#';
                        if(!check())
                            flag=1;///存在某种情况被拿了之后不能赢
                        a[i][j]='W';
                    }
                }
            }
            if(flag==0)
                printf("Alice\n");
            else
                printf("Emmm\n");
        }
        else
        {
            printf("Bob\n");
        }
    }
    return 0;
}

 

posted @ 2019-05-03 22:40  守林鸟  阅读(321)  评论(0编辑  收藏  举报