题意
Nim游戏改编版,取到最后一个石子的人算输。
分析
如果全是1的话则特判。
假设其中一堆石子个数大于1,:
设sum=所有石子的异或和
若剩下两堆相同且不为1的石子,那么后手必胜。
若sum==0则必然可以转换成上述状态,则后手必胜。
我也不知道为什么。。。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
int n;
scanf("%d",&n);
int flag=0,sum=0;
for (int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
if (x>1) flag=1;
sum^=x;
}
if (flag)
{
if (sum) printf("John\n");
else printf("Brother\n");
}
else
{
if (sum) printf("Brother\n");
else printf("John\n");
}
}
return 0;
}