思路:一个基础的Nim博弈,首先我们要知道一个东西就是a1^a2^a3....an=0的话那么先手是必败的,
若a1^a2^...^an!=0,一定存在某个合法的移动,将ai改变成ai'后满足a1^a2^...^ai'^...^an=0。若a1^a2^...^an=k,则一定存在某个ai,它的二进制 表示在k的最高位上是1(否则k的最高位那个1是怎么得到的)。这时ai^k<ai一定成立。则我们可以将ai改变成ai'=ai^k,那么最后^起来还是为0
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000000+500;
int a[105];
int main()
{
int n;
while(scanf("%d",&n)!=EOF && n)
{
int sum = 0;
for(int i = 1;i<=n;i++)
{
scanf("%d",&a[i]);
sum^=a[i];
}
int ans = 0;
if(sum==0)
printf("0\n");
else
{
int res;
for(int i = 1;i<=n;i++)
{
res = sum^a[i];
if(res<a[i])
ans++;
}
printf("%d\n",ans);
}
//printf("%d\n",ans);
}
}