博弈 巴什博弈

2021-06-22 01:08:21 字數 1368 閱讀 8051

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

顯然,如果n=m+1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則:如果n=(m+1)r+s,(r為任意自然數,s≤m),那麼先取者要拿走s個物品,如果後取者拿走k(≤m)個,那麼先取者再拿走m+1-k個,結果剩下(m+1)(r-1)個,以後保持這樣的取法,那麼先取者肯定獲勝。總之,要保持給對手留下(m+1)的倍數,就能最後獲勝。

這個遊戲還可以有一種變相的玩法:兩個人輪流報數,每次至少報乙個,最多報十個,誰能報到100者勝。

對於巴什博奕,那麼我們規定,如果最後取光者輸,那麼又會如何呢?

(n-1)%(m+1)==0則後手勝利

先手會重新決定策略,所以不是簡單的相反行的

例如n=15,m=3

後手 先手 剩餘

0 2 13

1 3 9

2 2 5

3 1 1

1 0 0

先手勝利 輸的人最後必定只抓走乙個,如果》1個,則必定會留乙個給對手

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:2 描述

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

輸入第一行是乙個正整數n表示有n組測試資料

輸入有不到1000組資料,每組資料一行,有兩個數n和m,之間用空格分隔。

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

樣例輸入

2

1000 1

1 100

樣例輸出

lose

win

演算法:最多取m個,則如果總數n%(m+1)為0,則無論先手取了幾個t1,第二個人都取t2,使得t1+t2==m+1即可獲勝

相反 如果n%(m+1)!=0 ,則先手不餘數去掉,之後按上述方案,即可獲勝

#includeusing namespace std;

int main()

if(n%(m+1))//必勝態

}printf("\n");

}else

printf("none\n");

}return 0;

}

博弈之 巴什博弈

博弈乍看都是乙個高大上的詞語 巴什博弈的主要內容 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。其中它強調的是只有一堆物品 如果n m個 那麼先拿的一定會贏,如果n m 1 個,那麼第乙個人無論拿多少,第二個人一定會最後取光,如果n m 1 n 那麼只...

簡單博弈之巴什博弈

例題 guns和roses是兩個好朋友,這一天他們比賽吃葡萄。假定他們有ans顆葡萄。在比賽之前他們會首先確定每次吃葡萄的數量的最大值為s,和ans的具體值。兩個人輪流吃葡萄,每次最多吃s顆,不能不吃。即假定每次吃m顆葡萄,則 1 m s 遊戲規定在誰吃完葡萄後,他們兩個人所吃的葡萄總和等於ans,...

數論 博弈 巴什博弈 BAshGame

巴什博弈 一堆物品有n個,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。當石子有1 m個時,毫無疑問,先手必勝 當石子有m 1個時,先手無論拿幾個,後手都可以拿乾淨,先手必敗 當石子有m 2 2m時,先手可以拿走幾個,剩下m 1個,先手必勝 我們不難發現,面臨m 1個石...