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;
}

 

 

 

 

posted @ 2013-09-11 22:11  _随心所欲_  阅读(133)  评论(0编辑  收藏  举报