链接:https://ac.nowcoder.com/acm/contest/847/B
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

Alice和Bob正在下井字棋,顾名思义,在3*3棋盘上先完成三子连珠(横、竖,或者斜对角线)的玩家将获胜。

Alice执白子,Bob执黑子。

但是在下了几步后,Alice觉得这不好玩并失去了耐心,现在轮到他落子。他想知道他是否能在下一步立即获得游戏胜利。

本来这是个简单的判定,问题是Bob是很坏的,如果他发现Alice可以在下一步立即胜利,Bob会偷偷的偷走Alice一颗棋子而尽可能使得Alice不能立马赢得胜利。 给你当前的局况,你能帮助Alice弄清下一步能否获得胜利吗?

输入描述:

有多组测试样例。
第一行一个整数 T(T≤12000)
--测试样例的个数。
接下来每三行表示一个样例,且每一行包含三个字符。
如果第 i行第 j个字符是'#'表示 (i,j)这个位置是空的还没有被落子,如果是'W'则代表该位置有一个白子,'B'则代表该位置有一个黑子。
保证输入不存在已完成的三子连珠,不保证黑子和白子的数目相等,不保证有可以落子的点,如果没有点可以落子则默认Alice不能在下一步立即获得游戏胜利。

 

输出描述:

对每个样例输出一行。
如果Bob不偷走Alice的棋子Alice也不能在下一步立即获得游戏胜利,请输出"Bob"。
如果Bob需要偷走Alice的一颗棋子才能使Alice不能在下一步立即获得游戏胜利,请输出"Emmm"。
如果即使Bob偷走Alice的一颗棋子Alice也能在下一步立即获得游戏胜利,请输出"Alice"。

 

示例1

输入

复制

1
W#W
BWB
#B#

输出

复制

Alice

示例2

输入

复制

1
W##
BBW
BWB

输出

复制

Bob

示例3

输入

复制

1
W#W
B#B
#B#

输出

复制

Emmm

思路:暴力模拟

***了

#include<bits/stdc++.h>
using namespace std;
char s[15];
bool check(int x,int y,int z)
{
	int a=(s[x]=='W')+(s[y]=='W')+(s[z]=='W');
	int b=(s[x]=='#')+(s[y]=='#')+(s[z]=='#');
	return a==2&&b==1;
}
bool judge(){
	return check(1,2,3)||check(4,5,6)||check(7,8,9)||check(1,4,7)||check(2,5,8)||check(3,6,9)||check(1,5,9)||check(3,5,7);
}
void solve(){
	scanf("%s%s%s",s+1,s+4,s+7);
	if(judge()){
		for(int i=1;i<=9;i++){
			if(s[i]=='W'){
				s[i]='#';
				if(!judge()){
					printf("Emmm\n");
					return ;
				}
				s[i]='W';
			}
		}
		printf("Alice\n");
	}
	else printf("Bob\n");
}
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		solve();
	}
	return 0;
}