鏈結
甲,乙兩個人玩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堆石子的數量,他想知道是否存在先手必勝的策略。輸...