HDU1850 - Being a Good Boy in Spring Festival 【尼姆博弈】

一年在外 父母時刻牽掛 
春節回家 你能做幾天好孩子嗎 
寒假裏嘗試做做下面的事情吧 

陪媽媽逛一次菜場 
悄悄給爸爸買個小禮物 
主動地 強烈地 要求洗一次碗 
某一天早起 給爸媽用心地做回早餐 

如果願意 你還可以和爸媽說 
咱們玩個小遊戲吧 ACM課上學的呢~ 

下面是一個二人小遊戲:桌子上有M堆撲克牌;每堆牌的數量分別爲Ni(i=1…M);兩人輪流進行;每走一步可以任意選擇一堆並取走其中的任意張牌;桌子上的撲克全部取光,則遊戲結束;最後一次取牌的人爲勝者。 
現在我們不想研究到底先手爲勝還是爲負,我只想問大家: 
——“先手的人如果想贏,第一步有幾種選擇呢?” 

Input

輸入數據包含多個測試用例,每個測試用例佔2行,首先一行包含一個整數M(1<M<=100),表示撲克牌的堆數,緊接着一行包含M個整數Ni(1<=Ni<=1000000,i=1…M),分別表示M堆撲克的數量。M爲0則表示輸入數據的結束。 

Output

如果先手的人能贏,請輸出他第一步可行的方案數,否則請輸出0,每個實例的輸出佔一行。 

Sample Input

3
5 7 9
0

Sample Output

1
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <queue>
#include<cmath>
using namespace std;
//const int N=100005;
//const int INF=0x3f3f3f3f;
int main()
{
   int n,a[101];
   while(scanf("%d",&n)!=EOF && n)
   {
       int ans=0;
       for(int i=0;i<n;++i)
       {
           scanf("%d",&a[i]);
           ans^=a[i];
       }
       int count=0;
       for(int i=0;i<n;++i)
       {
           if(a[i]>(ans^a[i]))
                ++count;
       }
       printf("%d\n",count);
   }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章