杭电1907

本题为尼姆博弈。对于N堆的糖,一种情况下是每堆都是1,那么谁输谁赢看堆数就可以判断了。对于不都是1的话,初始给的是奇异局势的话,则先取者为赢。初始给的是非奇异局势的话,则先取者为输。(采取异或来判断是否为奇异局势,详细说明见上一篇三类博弈问题。)

#include 
#include 
using namespace std;
int main()
{
	int T,N;
	int sum,i;
	int a[50],flag;
	scanf("%d",&T);
	while(T--)
	{
		flag=1;
		sum=0;
		scanf("%d",&N);
		for(i=1;i<=N;i++)
		{
		scanf("%d",&a[i]);
		if(a[i]!=1)flag=0;
		}
		if(flag)
		{
			if(N%2==0)
			{
				printf("John\n");
			}
			else
			printf("Brother\n");
		}
		else
		{
			for(i=1;i<=N;i++)
			sum=sum^a[i];
			if(sum==0)
			{
				printf("Brother\n");
			}
			else 
			printf("John\n");
		}
	}
return 0;
}








你可能感兴趣的:(博弈)