题目链接:https://vjudge.net/problem/POJ-2975
题意:严格意义来说其实并不是博弈论。
有多少种方法可以产生必胜态(也就是让对手为必败态),也就是异或值为0的方式
题解:模拟,前缀异或和后缀异或即可。
坑点:不能等于
#include<cstdio>
using namespace std;
const int N = 1e4+10;
typedef long long ll;
ll a[N];
ll pre[N] , suf[N];
int _ , n ;
int main(){
while(~scanf("%d" , &n )){
if(n == 0) break;
ll sum = 0;
pre[n+1] = 0;
suf[n+1] = 0;
for(int i = 1;i <= n ;i ++){
scanf("%lld" , &a[i]);
pre[i] = pre[i-1] ^ a[i];
}
for(int i = n;i >= 1;i --){
suf[i] = suf[i+1] ^ a[i];
}
int ans = 0;
for(int i = 1; i <= n ;i ++){
if((pre[i-1] ^ suf[i+1] ) < a[i]){
ans ++;
}
}
printf("%d\n",ans);
}
}