题意:
在nim游戏中求先手能够取胜的方案数
分析:
我们知道一般求nim游戏是否能胜是把所有堆石头异或判断异或是否为0,如果为0必败,那么对于本题就是要求有几堆石头可以拿走一定的石头使得剩下的异或和为0
因为一个数异或自己为0 那么我们可以利用这点判断有几种方案
ACcode:
#include<iostream>
#include<cstdio>
#define maxn 1005
using namespace std;
int a[maxn];
int main(){
int n,sg,ans;
while(scanf("%d",&n),n){
sg=ans=0;
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
sg^=a[i];
}
if(sg)for(int i=1;i<=n;++i)if((sg^a[i])<a[i])ans++;
printf("%d\n",ans);
}
return 0;
}