甲,乙兩個人玩nim取石子遊戲。
nim遊戲的規則是這樣的:地上有n堆石子,每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。ni
mnim
博弈的模板。
定理:nim
nim博弈中先手必勝,當且僅當a1x
ora2
xora
3xor
...x
oran
>0a
1xo
ra2
xora
3xo
r...
xora
n>0。
設n=a證明過程很粗略而不嚴謹,大概是這個意思好了:):1xor
a2xo
ra3x
or..
.xor
ann=
a1x
ora2
xor
a3x
or..
.xor
an因為ax≥
0ax
≥0,所以顯然n≥0
n≥0首先,當所有石子全部被取完時,顯然有n=0
n=0。此時先手處於必敗態。
如果n>0n
>
0,那麼設n
n二進位制下從左往右數第一位為1的是第k
k位,那麼必然有奇數堆石子的第k
k位為1,設第i
i堆石子的第k
k位為1,那麼就從i
i中取出若干石子,使得aia
i變為aixo
rnai
xor
n(顯然aix
ornaix
orn)。由於數量為奇數,那麼取完的必然是先手,此時有n=0
n=0。
通過數學歸納法可得,n=0
n=0時先手為必敗態,n
>0n
>
0時先手為必勝態。
)
#include
using
namespace std;
int t,n,ans,x;
intmain()
if(!ans)
printf
("no\n");
else
printf
("yes\n");
}return0;
}
洛谷 P2197 模板 nim遊戲 解題報告
甲,乙兩個人玩nim取石子遊戲。nim遊戲的規則是這樣的 地上有n堆石子 每堆石子數量小於10000 每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。第一行乙個整...
洛谷P2197 模板 nim遊戲 博弈論
甲,乙兩個人玩nim取石子遊戲。nim遊戲的規則是這樣的 地上有n堆石子,每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。n im nimni m博弈的模板。定理...
洛谷 2197 模板 nim遊戲
題目描述 甲,乙兩個人玩nim取石子遊戲。nim遊戲的規則是這樣的 地上有n堆石子 每堆石子數量小於10000 每人每次可從任意一堆石子裡取出任意多枚石子扔掉,可以取完,不能不取。每次只能從一堆裡取。最後沒石子可取的人就輸了。假如甲是先手,且告訴你這n堆石子的數量,他想知道是否存在先手必勝的策略。輸...