题意:n堆石子,每次每个人至少从其中一堆移走至少一个石子,然后可以选择该堆中任意数量的石子分配到其它还有石子的堆。
思路:可以看出当你碰到(x,x)成偶堆时,你必输,因为不管你怎么取和移动,对方只要对另一对偶堆进行相同操作,直到最后变成(1,1),此时显然输了。这样只要你是m对成偶数堆,那么就是必输态,相反的,只要不是必输态那么就是必胜态,也就是只要不是完全对偶的堆,都可以经过一次操作将它变成对偶堆。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int num[10];
int main()
{
int n,i;
while(scanf("%d",&n)!=-1&&n)
{
for(i=0; i<n; i++)
scanf("%d",&num[i]);
if(n&1) puts("1");
else
{
sort(num,num+n);
for(i=1; i<n; i+=2)
if(num[i]!=num[i-1])
break;
if(i>=n) puts("0");
else puts("1");
}
}
return 0;
}