尼姆博弈的典型例题
#include<iostream>
using namespace std;
int main()
{
int n;
int i,j;
int a[100+5];
int ans,tmp,cnt;
while(cin>>n&&n)
{
for(i=0;i<n;i++) cin>>a[i];
ans=a[0];
for(i=1;i<n;i++) ans^=a[i];//求出所有堆的按位与,为后面做准备
tmp=cnt=0;
//根据按位与的定义,与a【i】与所有按位与==除a【i】所有的按位与
//因此只要得到一个理想的值小于这个堆的张数,就一定可以取出如此多张使对方到达必败点
for(i=0;i<n;i++)
{
tmp=ans^a[i];
if(tmp<a[i]) cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
cout<<cnt<<endl;
}
return 0;
}