mex運算
設s表示乙個非負整數集合。定義mex(s)為求出不屬於集合s的最小非負整數的運算,即:找到集合當中不存在的最小自然數。
mex(s) = min, x屬於自然數,且x不屬於s
sg函式
在有向圖遊戲中,對於每個節點x,設從x出發共有k條有向邊,分別到達節點y1, y2, …, yk,定義sg(x)為x的後繼節點y1, y2, …, yk 的sg函式值構成的集合再執行mex(s)運算的結果,即:
sg(x) = mex()
特別地,整個有向圖遊戲g的sg函式值被定義為有向圖遊戲起點s的sg函式值,即sg(g) = sg(s)。sg(終點)=0,存在y1, y2, ... ,yn的局面:
這裡面不存在的最小自然數。如下圖所示,圖的最後乙個點(第二條路徑)即終點定義為0,終點前乙個點不存在最小自然數則為1,往後乙個數不存在最小自然數除了0和1,那麼就是2了,如此遞推,最開始那個不存在最小自然數為3。
結論:sg = 0,必敗,sg != 0必敗。
定理
有向圖遊戲的某個局面必勝,當且僅當該局面對應節點的sg函式值大於0。
有向圖遊戲的某個局面必敗,當且僅當該局面對應節點的sg函式值等於0。
給定nn堆石子以及乙個由kk個不同正整數構成的數字集合ss。
現在有兩位玩家輪流操作,每次操作可以從任意一堆石子中拿取石子,每次拿取的石子數量必須包含於集合ss,最後無法進行操作的人視為失敗。
問如果兩人都採用最優策略,先手是否必勝。
輸入格式
第一行包含整數kk,表示數字集合ss中數字的個數。
第二行包含kk個整數,其中第ii個整數表示數字集合ss中的第ii個數sisi。
第三行包含整數nn。
第四行包含nn個整數,其中第ii個整數表示第ii堆石子的數量hihi。
輸出格式
如果先手方必勝,則輸出「yes」。
否則,輸出「no」。
資料範圍
1≤n,k≤1001≤n,k≤100,
1≤si,hi≤100001≤si,hi≤10000
輸入樣例:
2
2 53
2 4 7
輸出樣例:
yes
分析:根據例子畫出有向圖得到初始狀態sg的值
int s[n], f[m];//s表示誰的個數,f表示sg的值
//求sg
int sg(int x)
//判斷當前集合當中不存在的點
for (int i = 0; ; i ++)
if (!s.count(i))//如果當前數不存在,當前的值就是i
return f[x] = i;
}int main()
if (res) puts("yes");
else puts("no");
return 0;
}
博弈論 Nim遊戲
這種遊戲稱為nim博弈,遊戲過程中面臨的狀態成為局面。n im nimni m博弈不存在平局,只有先手必勝和先手必敗兩種情況。定理nim 博弈先手 必勝,當 且僅當a 1xora2 xor xoran 0nim博弈先手必勝,當且僅當 a 1 texta 2 text cdots text a n n...
博弈論(一) Nim遊戲
重點結論 對於乙個nim遊戲的局面 a1,a2,an 它是p position當且僅當a1 a2 an 0,其中 表示位異或 xor 運算。nim遊戲是博弈論中最經典的模型 之一?它又有著十分簡單的規則和無比優美的結論,由這個遊戲開始了解博弈論恐怕是最合適不過了。nim遊戲是組合遊戲 combina...
博弈論之Nim遊戲
二 nim遊戲的定義 三 過程例項 四 分析 3.bouton s theorem 五 例題 nim遊戲是博弈論中最經典的模型 之一 它又有著十分簡單的規則和無比優美的結論 nim遊戲是組合遊戲 combinatorial games 的一種,準確來說,屬於 impartial combinator...