時間限制:
1000 ms | 記憶體限制:
1000 kb
難度: 6
描述 小王喜歡與同事玩一些小遊戲,今天他們選擇了玩取石子。
遊戲規則如下:共有n堆石子,已知每堆中石子的數量,兩個人輪流取子,每次只能選擇n堆石子中的一堆,取一定數量的石子(最少取乙個),取過子之後,還可以將該堆石子中剩下的任意多個石子中隨意選取幾個放到其它的任意一堆或幾堆上。等哪個人無法取子時就表示此人輸掉了遊戲。注意,一堆石子沒有子之後,就不能再往此處放石子了。
假設每次都是小王先取石子,並且遊戲雙方都絕對聰明,現在給你石子的堆數、每堆石子的數量,請判斷出小王能否獲勝。
例如:如果最開始有4堆石子,石子個數分別為3 1 4 2,而小王想決定要先拿走第三堆石子中的兩個石子(石子堆狀態變為3 1 2 2),然後他可以使石子堆達到的狀態有以下幾種:
3 1 2 2(不再移動石子)
4 1 1 2(移動到第一堆乙個)
3 2 1 2(移動到第二堆乙個)
3 1 1 3(移動到第四堆乙個)
5 1 0 2(全部移動到第一堆)
3 3 0 2(全部移動到第二堆)
3 1 0 4(全部移動到最後)
輸入可能有多組測試資料(測試資料組數不超過1000)
每組測試資料的第一行是乙個整數,表示n(1<=n<=10)
第二行是n個整數分別表示該堆石子中石子的數量。(每堆石子數目不超過100)
當輸入的n為0時,表示輸入結束
輸出對於每組測試資料,輸出win表示小王可以獲勝,輸出lose表示小王必然會敗。
樣例輸入
32 1 3
21 1
0
樣例輸出
winlose
這一題是樓教主男人八題翻譯過來的,真心不會。 看別人部落格才知道的規律。必敗點是有偶數堆石子,並且每種石
子數量的堆數都為偶數。 必敗點的推法不太清楚,這裡不能詳述。 根據博弈的pn圖,每種必勝點都可以轉化為必
敗點,所以只要存在有堆數為奇數的石子數量,就可以確定當前局面為必勝點。
具體**如下:
#include#includeint main()
{ int cnt[110],n,i,num,sign;
while(scanf("%d",&n)&&n)
{ memset(cnt,0,sizeof(cnt));
for(i=0;i
nyoj137 取石子(三) 樓教主男人八題之一
思路 一堆時,n態。兩堆時,當兩堆數量相同,p態,不同為n態。三堆時,先手可以變成兩堆一樣的,必勝n態。此時可以總結規律 堆數為偶數可能且石子數都是兩兩相同的,為p態。分析四堆時,當四堆中兩兩數量一樣的情況是p態,有一些數量不一樣的情況 x y z k 可以通過拿k並分配剩下的石子,讓四堆兩兩相同,...
NYOJ 取石子總結
nyoj的取石子有好多道,除了兩道難度為6的,剩下的在這兒簡單總結一下結論。取石子 一 有一堆石子共有n個,a和b輪流取,a先,每次最少取1個,最多取m個,先取完者勝,a,b足夠聰明,問誰先勝?比較簡單的巴什博弈,若n m 1 0,a勝,否則b勝。取石子 七 n個石子擺成一圈,a和b輪流取,每次可以...
NYOJ 取石子(一)
取石子 一 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1...