题目要求求出所给的游戏状态有多少种方法能够赢,
其实就是算最后有多少种满足t^a[i]<a[i],具体可以参考文章《关于博弈论基础知识的一些总结》或组合数学
t=a[0]^a[1]^......a[n];
注意异或运算的优先级比判断要低,需要加括号,我在这WA了一次
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=1001;
int n,a[maxn];
int main()
{
while(scanf("%d",&n)&&n)
{
int t=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
t^=a[i];
}
int ans=0;
for(int i=0;i<n;i++)
if((t^a[i])<a[i])
ans++;
printf("%d\n",ans);
}
return 0;
}