FZU - 2283(暴力)

/*
    FZU - 2283
    题意大体就是
    一个井字棋
    问你在两步之内能不能赢
    因为是你先走所以不可能输
    直接暴力枚举即可
    赢的情况有两种
    1.  你已经有两个在一起第三个地方可以下直接就赢了
    2.  套路
        当占有中心及其一个顶点而另外三个顶点有两个能下时
        当占有两个顶点且中心可下时
    
    感觉应该可以简化,懒得想了
*/
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <string.h>
#define mod 1000000007
#define MAX 10000005
#define ll long long
#define PI acos(-1)
using namespace std;


char map[4][4];
int judge1(char ch)//行
{
    if(map[1][1]==map[1][2]&&map[1][2]==ch&&map[1][3]=='.')
        return 1;
    if(map[1][1]==map[1][3]&&map[1][3]==ch&&map[1][2]=='.')
        return 1;
    if(map[1][3]==map[1][2]&&map[1][2]==ch&&map[1][1]=='.')
        return 1;
    if(map[2][1]==map[2][2]&&map[2][2]==ch&&map[2][3]=='.')
        return 1;
    if(map[2][1]==map[2][3]&&map[2][3]==ch&&map[2][2]=='.')
        return 1;
    if(map[2][3]==map[2][2]&&map[2][2]==ch&&map[2][1]=='.')
        return 1;
    if(map[3][1]==map[3][2]&&map[3][2]==ch&&map[3][3]=='.')
        return 1;
    if(map[3][1]==map[3][3]&&map[3][3]==ch&&map[3][2]=='.')
        return 1;
    if(map[3][2]==map[3][3]&&map[3][3]==ch&&map[3][1]=='.')
        return 1;
    return 0;
}
int judge2(char ch)//列
{
    if(map[1][1]==map[2][1]&&map[2][1]==ch&&map[3][1]=='.')
        return 1;
    if(map[1][1]==map[3][1]&&map[3][1]==ch&&map[2][1]=='.')
        return 1;
    if(map[3][1]==map[2][1]&&map[2][1]==ch&&map[1][1]=='.')
        return 1;
    if(map[1][2]==map[2][2]&&map[2][2]==ch&&map[3][2]=='.')
        return 1;
    if(map[1][2]==map[3][2]&&map[3][2]==ch&&map[2][2]=='.')
        return 1;
    if(map[3][2]==map[2][2]&&map[2][2]==ch&&map[1][2]=='.')
        return 1;
    if(map[1][3]==map[2][3]&&map[2][3]==ch&&map[3][3]=='.')
        return 1;
    if(map[1][3]==map[3][3]&&map[3][3]==ch&&map[2][3]=='.')
        return 1;
    if(map[2][3]==map[2][3]&&map[2][3]==ch&&map[1][3]=='.')
        return 1;
    return 0;
}
int judge3(char ch)//对角线
{
    if(map[1][1]==map[2][2]&&map[2][2]==ch&&map[3][3]=='.')
        return 1;
    if(map[1][1]==map[3][3]&&map[3][3]==ch&&map[2][2]=='.')
        return 1;
    if(map[3][3]==map[2][2]&&map[2][2]==ch&&map[1][1]=='.')
        return 1;
    if(map[1][3]==map[2][2]&&map[2][2]==ch&&map[3][1]=='.')
        return 1;
    if(map[1][3]==map[3][1]&&map[3][1]==ch&&map[2][2]=='.')
        return 1;
    if(map[3][1]==map[2][2]&&map[2][2]==ch&&map[1][3]=='.')
        return 1;
    return 0;
}
int judge4(char ch)//当占有中心及其一个顶点而另外三个顶点有两个能下时
{
    if(map[2][2]==ch&&map[1][1]==ch&&map[1][3]=='.'&&map[3][1]=='.')
        return 1;
    if(map[2][2]==ch&&map[1][3]==ch&&map[1][1]=='.'&&map[3][3]=='.')
        return 1;
    if(map[2][2]==ch&&map[3][1]==ch&&map[1][1]=='.'&&map[3][3]=='.')
        return 1;
    if(map[2][2]==ch&&map[3][3]==ch&&map[1][3]=='.'&&map[3][1]=='.')
        return 1;
    return 0;
}
int judge5(char ch)//当占有两个顶点且中心可下时
{
    if(map[1][1]==ch&&map[1][3]==ch&&map[2][2]=='.')
        return 1;
    if(map[1][1]==ch&&map[3][1]==ch&&map[2][2]=='.')
        return 1;
    if(map[1][3]==ch&&map[3][3]==ch&&map[2][2]=='.')
        return 1;
    if(map[3][1]==ch&&map[3][3]==ch&&map[2][2]=='.')
        return 1;
    return 0;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        memset(map,0,sizeof(map));
        for(int i=1;i<=3;i++)
            for(int j=1;j<=3;j++)
                cin>>map[i][j];
        char ch;
        cin>>ch;
        if(judge1(ch))
            cout<<"Kim win!"<<endl;
        else if(judge2(ch))
            cout<<"Kim win!"<<endl;
        else if(judge3(ch))
            cout<<"Kim win!"<<endl;
        else if(judge4(ch))
            cout<<"Kim win!"<<endl;
        else
            cout<<"Cannot win!"<<endl;


    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值