n im
nimni
m博弈不存在平局,只有先手必勝和先手必敗兩種情況。定理nim
博弈先手
必勝,當
且僅當a
1xora2
xor⋯
xoran≠
0nim博弈先手必勝,當且僅當 a_1\texta_2\text\cdots \text a_n\ne 0
nim博弈先
手必勝,
當且僅當
a1xora2
xor
⋯xoran
=
0
#include.h>
using namespace std;
int n,res,x;
int main()
if(res) cout<
<
"yes"
<
else cout<
<
"no"
<
}
現在,有乙個n
nn級台階的樓梯,每級台階上都有若干個石子,其中第i
ii級台階上有a
ia_i
ai個石子(i≥
1)
(i≥1)
(i≥1)。
兩位玩家輪流操作,每次操作可以從任意一級台階上拿若干個石子放到下一級台階中(不能不拿)。
已經拿到地面上的石子不能再拿,最後無法進行操作的人視為失敗。
問如果兩人都採用最優策略,先手是否必勝。
分析:如果奇數台階個數異或和不為0,先手必勝。
每次將奇數台階的異或和變為0,把異或和為0的局面拋給對面。
若對面移動偶數台階的石子,下一輪先手就把偶數台階的式子移動到下一級的奇數台階,這樣奇數台階的異或和始終不變。
若對面移動奇數台階,那下一輪先手再把移動到的偶數台階部分移動到下一奇數台階,就又是開局的情況了。
#include.h>
using namespace std;
int n,x,res;
int main()
if(res) cout<
<
"yes"
<
else cout<
<
"no"
<
}
設s
ss表示乙個非負整數的集合。定義mex
(s
)mex(s)
mex(s)
為求出不屬於集合s
ss的最小非負整數的運算,即mex
(s)=
minx
∈n,x
∉s
mex(s)=\underset\left \
mex(s)
=x∈n
,x∈/
smin
設局面x
xx能到達的局面為y1,
y2,.
..,y
ny_1,y_2,...,y_n
y1,y2
,..
.,yn
,則:
s g(
x)=m
ex()
sg(x)=mex(\left \ )
sg(x)=
mex(
)遊戲結束時,sg(
x)=0
sg(x)=0
sg(x)=
0設有m
mm個遊戲。先手必敗時:
s g(
g1
)xorsg
(g2)
xor⋯
xorsg(
gm)=
0sg(g_1)\textsg(g_2)\text\cdots\textsg(g_m)=0
sg(g1
)xorsg
(g2
)xor
⋯xorsg
(gm
)=0給定n
nn堆石子以及乙個由k
kk個不同正整數構成的數字集合sss。
現在有兩位玩家輪流操作,每次操作可以從任意一堆石子中拿取石子,每次拿取的石子數量必須包含於集合s
ss,最後無法進行操作的人視為失敗。
問如果兩人都採用最優策略,先手是否必勝。
分析:對於每個石子堆,求出他的sgsg
sg值:先遍歷集合,用有向圖遞迴的方式求出sgsg
sg值。最後判斷異或和是否為0
00
#include.h>
using namespace std;
const int n=
105,m=
1e5+5;
int n,m,s[n]
,f[m]
,res,x;
int sg
(int x)
for(int i=0;
;i++)if
(!s.
count
(i))
return f[x]
=i;}
int main()
if(res) cout<
<
"yes"
<
else cout<
<
"no"
<
}
給定n
nn堆石子,兩位玩家輪流操作,每次操作可以取走其中的一堆石子,然後放入兩堆規模更小的石子(新堆規模可以為0
00,且兩個新堆的石子總數可以大於取走的那堆石子數),最後無法進行操作的人視為失敗。
問如果兩人都採用最優策略,先手是否必勝。
分析:分別求出拆分的sgsg
sg值,然後判斷異或和是否為0即可。
其中用到重要結論
s g(
i,j)
=sg(
i)
xorsg(
j)
sg(i,j)=sg(i)\textsg(j)
sg(i,j
)=sg
(i)xorsg
(j)
#include.h>
using namespace std;
const int n=
105;
int n,res,f[n]
,x;int sg
(int x)
int main()
if(res) cout<
<
"yes"
<
else cout<
<
"no"
<
}
博弈論(一) 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...
Nim遊戲 簡單博弈論
原題鏈結 給定n堆石子,兩位玩家輪流操作,每次操作可以從任意一堆石子中拿走任意數量的石子 可以拿完,但不能不拿 最後無法進行操作的人視為失敗。問如果兩人都採用最優策略,先手是否必勝。輸入格式 第一行包含整數n。第二行包含n個數字,其中第 i 個數字表示第 i 堆石子的數量。輸出格式 如果先手方必勝,...