Nim遊戲模板

2021-09-12 11:49:34 字數 917 閱讀 8835

鏈結

甲,乙兩個人玩nim取石子遊戲。

nim遊戲的規則是這樣的:地上有n堆石子(每堆石子數量小於10000),每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。

模板題n 堆石子可以 看成幾個子遊戲。 求出每次遊戲的sg值 然後用 異或的方式相 " 加 " 。

sg函式的性質:

來看一下sg函式的性質。

首先,所有的沒有出邊的頂點,其sg值為0,因為它的後繼集合是空集。然後對於乙個sg(x)=0的頂點x,它的所有後繼y都滿足 sg(y)≠ 0。對於乙個sg(x)≠ 0的頂點,必定存在乙個後繼y滿足sg(y)=0。

這個時候你就應該有所發現了!sg函式的性質和n,p局面的性質非常相似!

以上表明,頂點x所代表的postion是p-position當且僅當sg(x)=0(跟p-positioin/n-position的定義是完全對應的)。

後手必勝當且僅當sg的異或和為0

**:

#include

#include

#include

#define maxn 10050

using

namespace std;

inline

intread()

int t,n;

int a[maxn]

,f[maxn]

,sg[maxn]

,vis[maxn]

;inline

void

getsg()

for(

int j=0;

;j++)}

}int

main()

return0;

}

模板 nim遊戲

甲,乙兩個人玩nim取石子遊戲。nim遊戲的規則是這樣的 地上有n堆石子 每堆石子數量小於10000 每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。第一行乙個整...

洛谷 nim遊戲 模板nim博弈論

題目傳送 題意 模板nim博弈論。思路 所有數的異或和如果為0,那麼先手必輸,否則先手必贏。證明 1.首先很明顯的乙個必輸態為 全部石子都為0,那麼先手直接輸 此時異或和為0 2.那麼當異或和不為0的時候,我們假設現在的異或和為k,那麼現在k的最高位的1的位置,一定對應於現在的石子堆中的一堆石子的最...

洛谷 2197 模板 nim遊戲

題目描述 甲,乙兩個人玩nim取石子遊戲。nim遊戲的規則是這樣的 地上有n堆石子 每堆石子數量小於10000 每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。輸...