尼姆博弈:
有三堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,最後取光者得勝。
這種情況與二進位制有著很大的關係,
我們用(a,b,c)來表示某種局勢,
那麼(0,0,0)
必然為奇異局勢,
(0,n,n)
也是種奇異局勢
。因為如果對手在其中一堆取m個石子(m<=n),那麼你也可以在另外一堆中取m個,他取幾個你就取幾個,到最後有一堆變為0的時候,你再取完另一堆勝利(滿滿的套路=。=)。
直接說結論吧:
對於任意的奇異局勢
(a,b,c)
,都有a^b^c=0。(^
為異或運算)。
對於任意的非奇異局勢(a,b,c),假設a
原理:因為a^a=0,
所以a^b^c=a^b^(a^b)=0,
所以只需將c-(a^b)即可。
來來來,這裡有個栗子,還熱乎乎的呢=w=:
有個非奇異局勢(14,21,39),
因為14^21=27,39-27=12,所以從39中拿走12個物體即可達到奇異局勢(14,21,27)。
這裡還有個栗子,買一贈一哦=w=
:我們來實際進行一盤比賽看看:
甲:(7,8,9)->(1,8,9)奇異局勢
乙:(1,8,9)->(1,8,4)
甲:(1,8,4)->(1,5,4)奇異局勢
乙:(1,5,4)->(1,4,4)
甲:(1,4,4)->(0,4,4)奇異局勢
乙:(0,4,4)->(0,4,2)
甲:(0.4,2)->(0,2,2)奇異局勢
乙:(0,2,2)->(0,2,1)
甲:(0,2,1)->(0,1,1)奇異局勢
乙:(0,1,1)->(0,1,0)
甲:(0,1,0)->(0,0,0)奇異局勢
甲勝。
於是,我們又發現了一些神奇而顯然的性質=w=:
性質1:對於某個局面(a1,a2,...,an),
若a1^a2^...^an!=0,
一定存在某個合法的移動,將ai改變成ai'後滿足a1^a2^...^ai'^...^an=0。
分析:令res=a1^a2^......an,設res的最高位為pos(那pos的數肯定為1啦),
那麼一定存在某個ai,它的二進位制在pos位上也是1,(否則k的最高位那個1是怎麼得到的)。
異或res
後這位變為0,
這時ai^res
一定成立。
則我們可以將ai改變成ai'=ai^res,此時a1^a2^...^ai'^...^an=a1^a2^...^an^res=0。
注意:雖然它一定存在合法的移動(一定有a[i]使ai^res
一定成立)使之變成奇異局勢,
但並不是每一堆都可以進行操作的,只有當a[i]>a[i]^res 的時候才可以對這一堆進行操作
拓展:任給n
堆石子,
兩人輪流從任一堆中任取
(每次只能取自一堆
),取最後一顆石子的人獲勝,問先取的人如何獲勝?
根據上面所述,
n個數異或即可。
如果開始的時候t=
0,那麼先取者必敗,
如果開始的時候
t>0
,那麼只要每次取出石子使得t=
0,即先取者有獲勝的方法。
性質2:對於某個局面(a1,a2,...,an),若a1^a2^...^an=0,一定不存在某個合法的移動,將ai改變成ai'後仍滿足a1^a2^...^ai'^...^an=0。
獲勝情況對先取者進行討論:
異或結果為
0,先取者必敗,無獲勝方法。後取者獲勝;
結果不為
0,先取者有獲勝的取法。
hdu1850
判斷先手能否贏,可以贏的話輸出第一步的方案數
var
n,t :longint;
i :longint;
a :array[0..110] of longint;
function work(t:longint):longint;
var j:longint;
ans:longint;
begin
ans:=0;
for j:=1 to n do
if (a[j]>a[j] xor t) then inc(ans);//判斷能否對當前堆進行操作
exit(ans);
end;
begin
read(n);
while (n<>0) do
begin
t:=0;
for i:=1 to n do
begin
read(a[i]);
t:=t xor a[i];
end;
if t=0 then writeln(0) else writeln(work(t));
read(n);
end;
end.
【綜合巴什博弈、尼姆博弈給出】任給
n堆石子
,兩人輪流從任一堆中任取
(每次只能取自一堆
),規定每方每次最多取k顆
,取最後一顆石子的一方獲勝
.問先取的人如何獲勝?
與上面的問題比,這個更複雜一些,我們可以這樣做:
令bi=ai mod(k+1)定義t
『=b1 xor b2 xor ... xor bn如果t
『=0
那麼沒有獲勝可能,先取者必敗如果
t』>0
那麼必然存在取的方法,使得t『=
0,先取者有獲勝的方法
假設對方取了在
ai中取了
r(r<=k)個如果
ai中剩下的石子多於
k 那麼就在
ai中取走
k+1-r
個,則bi
不變,t『不變
如果ai<=k
那麼我們需要重新計算bi和
t『按照上面的方法來做就可以了
尼姆博弈 hdu 1850
nim博弈 題意 有m堆牌,兩個人先後取某堆中的任意 不少於一 張牌,最後取完者勝 問先手取勝第一次取牌有多少種取法。思路 1 如若給出 的是必敗狀態 a1 a2 an 0,則先手不會有任何可能獲得勝利 2 若給出的是必勝狀態 a1 a2 an k,其中k不為零 那麼我們的目的是要把必勝狀態 轉化為...
HDU1850 尼姆博弈求可行方案數目
題型 尼姆博弈模型,大致上是這樣的 有3堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取1個,多者不限,最後取光者得勝。分析 1 首先自己想一下,就會發現只要最後剩兩堆物品一樣多 不為零 第三堆為零,那面對這種局勢的一方就必敗 那我們用 a,b,c 表示某種局勢,首先 0,0,0 顯...
博弈 尼姆博弈
今天我們來聊一聊另一種博弈 尼姆博弈,這一種博弈可以說是巴什博弈的一種變體,巴什博弈中 石子 的堆數為1堆,而在利姆博弈中 石子 的堆數為n堆,還有在尼姆博弈中取石子的規則也發生了變化,前一種博弈中取石子的數量限定在 1,l 而後一種取石子的數量可以為任意數 但不能不取,而且還不能超過這一堆石子的總...