盒子遊戲
描述
有兩個相同的盒子,其中乙個裝了 n 個球,另乙個裝了乙個球。alice 和 bob 發明了乙個遊戲,規則如下:alice 和 bob 輪流操作,alice 先操作。每次操作時,遊戲者先看看哪個盒子裡的球的數目比較少,然後清空這個盒子(盒子裡的球直接扔掉),然後把另乙個盒子裡的球拿一些到這個盒子中,使得兩個盒子都至少有乙個球。如果乙個遊戲者無法進行操作,他(她)就輸了。下圖是乙個典型的遊戲:
面對兩個各裝乙個球的盒子,bob 無法繼續操作,因此 alice 獲勝。你的任務是找出誰會獲勝。假定兩人都很聰明,總是採取最優策略。
輸入輸入最多包含 300 組測試資料。每組資料僅一行,包含乙個整數 n(2<=n<=10^9)。輸入結束標誌為 n=0。
輸出對於每組資料,輸出勝者的名字。
樣例輸入
2樣例輸出3 4
0
alice**bob
alice
湖南省第七屆大學生計算機程式設計競賽
注意題目沒有說清的一層意思:當兩個盒子裡球的數目相等的時候任意清空乙個盒子。
思路:
先從最基本情況來分析它的勝負狀況:
a. 1,1 必敗狀態,不解釋。
b. 2,0 2,1 2,2 必勝狀態,2,1 2,2和2,0是一樣的情況,因為總要清空較小的那個盒子,下面列舉的情況都省略。
c. 3,0 必敗狀態,因為不管怎麼給空盒子分配,都是符合情況b,而求情況b是對手的必勝狀態
d. 4,0 必勝狀態,因為可以分配1個或者3個給空盒子,滿足情況c嗎,使對手必敗
同理(5,0)(6,0)都是必勝狀態。
而(7,0)不管怎麼分配只能得到:6,1 5,2 4,3 ,這些都是對手的必勝狀態,所以(7,0)是乙個必敗狀態。
那麼接下來就可以仿照(3,0)這個必敗狀態知道8,0 9,0 10,0 11,0 12,0 13,0 14,0是必勝狀態,而15,0是必敗狀態。
先在就差不多可以看出規律了:只要輸入的數字是2n-1,先手必敗
#include#include
int main (void
)
return
exit_success;
}
找規律博弈小記(更新)
最近在hdoj上水博弈的題目,在這裡記錄一些小規律。1 題意 一堆n個石子,每次最多取q個,最少取p個,切最後不少於p個時必須一次性取完。誰後取完者輸。ps 那麼就是誰先取到剩p個時候就贏了,少於p個的話一定輸,因為必須取完,如果誰當前遇到0個,贏,大於p小於p q個是贏,因為先手總是可以想辦法給後...
hdu1564博弈 找規律
include include include include include include include include include include include include include define pi acos 1 define ll long long define mo...
hdu 5708 博弈找規律
題意 乙個無限大的棋盤,一開始在1,1,有三種移動方式,x 1,y x,y 1 x k,y k 最後走到nm不能走了的人算輸。思路。我們看成一開始在 n,m 往1,1,走,所以自然可以從1,1,開始遞推往出,那麼打表程式就出來了。打出表以後我們觀察到k等於1時稍有特殊,其他則與 min cx,cy ...