巴什博弈(bash game,同餘理論):只有一堆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
者勝。**:
int
bash_game
(int n,
int m)
//是否先手有必贏策略
#include
using
namespace std;
typedef
long
long ll;
const
int n =
1e7+7;
#define inf 0x3f3f3f3f
#define jiechufengyin std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
ll n, k;
intmain()
return0;
}
其餘講解:
參考文章:
NYOJ 巴什博奕 bash game
時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1 m 100...
巴什博弈 Bash Game
問題模型 只有一堆n個物品,兩個人輪流從這堆物品中取物品,規定每次至少取乙個,最多取m個。解決思路 若n m 1時,由於先手最多只能取m個,所以無論先手怎麼取,剩下的都可以讓後手取完,即後手必勝。假設n m 1 r s。1 當s不等於0,先手要拿走s個物品,此時後手處於在剩下 m 1 r個物品的狀態...
巴什博弈 Bash Game
巴什博奕 bash game 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個,最後取光者得勝。顯然,如果n m 1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1 r s,r...