NC24223. Tic-Tac-Toe
描述
输入描述
有多组测试样例。第一行一个整数--测试样例的个数。接下来每三行表示一个样例,且每一行包含三个字符。
如果第行第个字符是'#'表示这个位置是空的还没有被落子,如果是'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
C++ 解法, 执行用时: 6ms, 内存消耗: 396K, 提交时间: 2022-06-26 22:46:21
#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; }