poj 2975 Nim 博弈论
令ans=a1^a2^...^an,如果需要构造出异或值为0的数,
而且由于只能操作一堆石子,所以对于某堆石子ai,现在对于ans^ai,就是除了ai以外其他的石子
的异或值,如果ans^ai<=ai,那么对于ai的话,是可以减小到ans^ai的值,然后使得所有数
的异或值为0,也即转移到了必败态。
代码如下:
#include<iostream> #include<stdio.h> #include<cstring> using namespace std; int a[1001]; int main(){ int n,t,ans,m,k; while(cin>>n&&n){ ans=m=0; for(int i=0;i<n;i++){ cin>>a[i]; m^=a[i]; } if(m){ for(int i=0;i<n;i++){ k=m^a[i]; if(k<a[i]) ans++; } } cout<<ans<<endl; } return 0; }