/*
2.可选步数为任意步,SG(x) = x; 
本题中每一堆都可以选任意个,所以每一堆的SG值都是所剩余的个数。
最后结果是所有堆的SG值异或的结果。令ans = 所有堆的SG值异或的结果
如果ans == 0,则是必败点。
如果ans != 0,使取后结果为0的策略是必胜策略
具体怎么取呢?
每一堆的数值与ans相异或,所得的结果就是这一堆可以取的数量。
但是,如要这一堆数量没有这么多,就不可以这么取
*/
#include <iostream>  
using namespace std;  
int value[101];  
int main ()  
{  
    int n,sum,count,i;  
    while (cin>>n && n)  
    {  
        sum=0;  
        for (i=0;i<n;i++)  
        {  
            cin>>value[i];  
            sum^=value[i];  
        }  
        count=0;  
        for (i=0;i<n;i++)  
        {  
            sum^=value[i];  
            if (value[i]>sum) count++;  
            sum^=value[i];  
        }  
        cout<<count<<endl;  
    }  
    return 0;  
}

results matching ""

    No results matching ""