一道博弈论经典题,nim游戏。
只不过要考虑有奇数个石子为1的堆的时候,为Brother赢。剩下就是nim游戏了。
极简代码
1 #include<cstdio> 2 using namespace std; 3 4 int T; 5 6 int main() 7 { 8 scanf("%d", &T); 9 while(T--) 10 { 11 int n, ans = 0, sum = 0, x; scanf("%d", &n); 12 for(int i = 1; i <= n; ++i) {scanf("%d", &x); ans ^= x; sum += x;} 13 if(sum == n) printf("%s ", (sum & 1) ? "Brother" : "John"); 14 else printf("%s ", ans ? "John" : "Brother"); 15 } 16 }
把我的头文件快读快写都删了~~