原题:http://acm.hdu.edu.cn/showproblem.php?pid=1907
题意:取法和Nim游戏一样,但是最后拿完的那个人是loser;
思路:需要考虑特殊情况 —— 最开始每堆的个数都为1,这个时候对堆数进行奇偶判断;
#include<iostream>
using namespace std;
const int maxn = 50;
int cas, n;
int a[maxn];
int main(){
cin>>cas;
while(cas--){
cin>>n;
int x = 0;
int cnt = 0;
for(int i = 0;i<n;i++){
cin>>a[i];
if(a[i] == 1) cnt++;
x = x^a[i];
}
if(cnt == n){
if(n%2 == 0) cout<<"John"<<endl;
else cout<<"Brother"<<endl;
continue;
}
if(x == 0) cout<<"Brother"<<endl;
else cout<<"John"<<endl;
}
return 0;
}
本文解析了一道关于Nim游戏变种的算法题目,介绍了如何通过异或运算及特殊情形判断来解决该问题,并提供了完整的C++代码实现。

5022

被折叠的 条评论
为什么被折叠?



