还是一道博弈论的题目
题意:对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余石子的一部分分给其它的某些堆。最后谁无子可取即输。
分析:首先考虑两堆相等的情况,一定是谁取谁输,因为对方永远可以做对称的操作。对于四堆,1、2堆相等,3、4堆相等的情况,一定也是先手输,后手也只需要做对称的操作(在先手取石子的对称堆中取相同多的石子,并把和先手等量的石子分给先手分配给的堆的对称堆。(若先手在3堆取,并分给1堆,那后手就在4堆取,分给2堆)。也就是说对于任意的一对一对相等的情况来说,一定是后手必胜。
#include<stdio.h>
#include<string.h>
int main()
{
int n,num[120],x,flag;
int i,j,k;
while(scanf("%d",&n)&&n)
{
memset(num,0,sizeof(num));
for(i=0;i<n;++i)
{
scanf("%d",&x);
num[x]++;
}
flag=0;
for(i=1;i<101;i++)
{
if(num[i]&1)
{
flag=1;
break;
}
}
printf("%d\n",flag);
}
return 0;
}