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