题意:

NIM题,问你第一个人有多少种取的方案

思路:

全部异或完后,然后让这个值分别异或每一个数

如果结果小于当前数,就说明可以从该堆中取走异或这个数这么多石子

ans就++

/* ***********************************************
Author        :devil
Created Time  :2016/5/29 11:31:46
************************************************ */
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <assert.h>
#include <map>
#include <string>
#include <cmath>
#include <stdlib.h>
using namespace std;
const int N=1e6+7;
int a[N];
int main()
{
    //freopen("in.txt","r",stdin);
    int n;
    while(~scanf("%d",&n)&&n)
    {
        int p=0,ans=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            p^=a[i];
        }
        for(int i=0;i<n;i++)
            if((p^a[i])<a[i])
                ans++;
        printf("%d\n",ans);
    }
    return 0;
}