/*
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;
}
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;
}