博弈論 三堆石子問題

2021-08-19 10:03:31 字數 1145 閱讀 9804

有三堆石子,分a,b,c三堆,兩人進行取石子遊戲,每次從其中一堆取任意多個(至少取乙個,可以取完)如果應該你取石子時,已經沒有石子可取,則你輸。如果你第乙個取,問你是否能贏,如果能贏,輸出第一次的取法否則輸出1

經典博弈問題,同類問題有:

1.一堆石子每次取1~k個,如果應該你取石子時,已經沒有石子可取,則你輸。

2.兩堆石子每次從其中一堆取個任意多個(至少取乙個,可以取完),如果應該你取石子時,已經沒有石子可取,則你輸。

3.n堆石子每次從其中一堆取個任意多個(至少取乙個,可以取完),如果應該你取石子時,已經沒有石子可取,則你輸。

其實都是同一類問題,既尋找奇異局勢。

例如1中,無石子可取的情況為0,同時無論對方如何取,你都可以令你們倆這一回合一共取(k+1)個石子,即當剩餘k+1個石子時對方無法直接取完而且無論如何取,你都可以將剩下的直接取完,即你贏,所以(k+1)的情況可以認為是0,重複上方的推論,我們可以得到當對方取石子時石子的個數是(k+1)的倍數則對方必輸,因此當你取石子時,只要石子數不是(k+1)的倍數就必贏即將石子數取到(k+1)的倍數

2中無石子可取情況為(0,0)那麼我們自然的想到如果兩堆石子的數目相等那麼只要跟著首先取石子的人取,則後手必應即若先手取第一堆i個,則後手取第2堆i個。所以當兩堆石子數相等時先手輸,否則後手輸。

3當為k堆時,我們可以使用異或進行運算,我們能得到k堆的石子數異或的結果,如果異或結果為0則表示後手贏否則先手贏,原因是,當異或結果為0時,先手無論如何拿都不能使異或結果依然為0,而當石子全部被拿完時,異或的結果必定為0,因此就表示先手不能把石子全部拿完;而當後手拿時,由於先手拿完後,異或結果不為0,則後手只要拿可以令當前異或結果為0的石子數即可,因此最後把石子全部拿完的必定是後手。

本題就是第3種型別

**:

#include #include #include #include #include #include #include #include #include #include #define ll long long

#define max 100005;

using namespace std;

struct st;

bool cmp(st a,st b)

int main()

}return 0;

}

博弈論 取石子問題

有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個人輪流從堆中取物 體若干,規定最後取光物體者取勝。這是我國民間很古老的乙個遊戲,別看這遊戲極其簡單,卻蘊含著深 刻的數學原理。下面我們來分析一下要如何才能夠取勝。一 巴什博弈 bash game,同餘理論 只有一堆n個物品,...

博弈論 取石子問題

有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個人輪流從堆中取物 體若干,規定最後取光物體者取勝。這是我國民間很古老的乙個遊戲,別看這遊戲極其簡單,卻蘊含著深 刻的數學原理。下面我們來分析一下要如何才能夠取勝。一 巴什博弈 bash game,同餘理論 只有一堆n個物品,...

石子遊戲 博弈論

有n n 堆石子,兩人輪流取石子,每次可以將一堆全部拿走,也可以選擇其中y y 個拿,但是要求y y 與這堆石子的總個數互質。求誰會勝利。明顯的博弈論之s g sg 函式。我們可以發現,質數的s g sg 值就等於上乙個質數的s g sg 值加一,而合數的s g sg值就是它的最小質因子的s g s...