取石子(一)(C語言)

2021-08-21 17:27:32 字數 951 閱讀 9422

一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他/她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n(1<=n<=1000000),兩個人輪番取出其中的若干個,每次最多取m個(1<=m<=1000000),最先把石子取完者勝利。我們知道,tt和他/她的室友都十分的聰明,那麼如果是tt先取,他/她會取得遊戲的勝利麼?

第一行是乙個正整數n表示有n組測試資料 輸入有不到1000組資料,每組資料一行,有兩個數n和m,之間用空格分隔。

對於每組資料,輸出一行。如果先取的tt可以贏得遊戲,則輸出「win」,否則輸出「lose」(引號不用輸出)

1000 1

1 100

lose

win

這題,是博弈論裡面的乙個基礎問題,叫巴什博弈

巴什博弈:只有一堆m個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取n個。最後取光者得勝。

假設m = n+1,因為至多可以取n個,所以,無論第乙個人取多少個,第二個人都可以把它全部取完

這樣後者是必勝的

那麼我們將上述情況化成一般的情況  m = (n+1) r+s  (s<=n,r為自然數)

我們要先取者能獲勝的話

首先   先取者要拿走s個物品

如果後取者拿走k個(k<=n)個,那麼先取者再拿走n+1-k個,如此往復

最後會剩下(n-1)(r-1)個

然後繼續上述過程

先取者必勝

上述過程可以概括為,每次給對手留下(n+1)的倍數

比如,給對手留下n+1個,那麼對手至多取n個,那麼先取者必勝

結論:如果m%(n+1)==0 先手必敗   m%(n+1)!=0為先手必勝。

#includeint main()

return 0;

}

acm 取石子(一)

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1 m 100...

NYOJ 取石子(一)

取石子 一 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1...

取石子(一) OJ

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1 m 100...