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;

}

 

 

 

 

你可能感兴趣的:(poj)