1. 程式人生 > >Being a Good Boy in Spring Festival(杭電1850)(尼姆博弈)

Being a Good Boy in Spring Festival(杭電1850)(尼姆博弈)

cor gree 強烈 方案 con tracking output script 主動

Being a Good Boy in Spring Festival

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4894 Accepted Submission(s): 2930


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

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

假設願意 你還能夠和爸媽說
咱們玩個小遊戲吧 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

Author lcy
Source ACM Short Term Exam_2007/12/13 //又是尼姆博弈中還有一種問題
#include<stdio.h>
int main()
{
	int i,n,sum,ans,a[102];
	while(scanf("%d",&n)&&n)
	{
		for(i=0,sum=0;i<n;i++)
		{
			scanf("%d",&a[i]);
			sum^=a[i];
		}
		for(i=0,ans=0;i<n;i++)
		{
			if((sum^a[i])<a[i])
		       ans++;
		}
		printf("%d\n",ans);
	}
	return 0;
} 


Being a Good Boy in Spring Festival(杭電1850)(尼姆博弈)