N堆牌,没堆Ai张,问先手必胜的前提下,第一次有多少种可行的取法。
每堆牌异或一下得到ans,如果是先取第i堆的话,其他堆异或的结果为B,那么(Ai-x) xor B==0时,说明从Ai中取走x可以留给对手一个必败态,所以对每一堆求出x后,判断一下x是否小于Ai,若小于则答案++。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int n,m,k;
int a[200];
int main()
{
// freopen("in.txt","r",stdin);
while(scanf("%d",&n) && n)
{
int ans=0;
for (int i=1; i<=n; i++)
scanf("%d",&a[i]),ans^=a[i];
int ct=0;
for (int i=1; i<=n; i++)
{
ans^=a[i];
if (ans<a[i]) ct++;
ans^=a[i];
}
cout<<ct<<endl;
}
return 0;
}