藍橋杯 高僧鬥法 尼姆博弈

2021-10-02 21:19:35 字數 829 閱讀 2139

還是挺菜不要噴結論參考這裡

就應用尼姆博弈中的結論,先手的高僧取走某個堆(a[i])的k個石子後使得a1^ a2…^ a[i]-k^ …^an=0時 對方面臨的就是奇異局面必敗。

#include

#include

using

namespace std;

intmain()

;while

(cin>>a[s++])

//得到s個和尚的座標

int nimbone[

100]

,b=0

;for

(int i=

0;i1;i=i+2)

if(s%2!=

0)//奇數個和尚 則最後乙個堆為0

nimbone[b++]=

0;int flag=0;

for(

int i=

0;i)//逐個石頭堆試探

if(ans==0)

nimbone[i]

+=j;

//說明拿j個石頭不行 放回原堆給下次拿j+1個 }}

if(flag==0)

printf

("no\n");

return0;

}

值得注意的是去nim石頭堆的方法, 相鄰兩個和尚為乙個堆,若奇數個最後乙個堆為0(視為兩個和尚在同一台階) 對於為什麼要這麼取還是有一點點疑惑(大概理解了) 有空想清楚了會分享出我的想法

當某一組石頭變為異或局面時 此時為對手移動和尚

此後只要先手與對手「平行」的步數最終必定變成對手面臨(0 0 0 0 ……0)的異或局面 他已經輸了

藍橋杯 歷屆試題 高僧鬥法 (尼姆博弈)

時間限制 1.0s 記憶體限制 256.0mb 問題描述 古時喪葬活動中經常請高僧做法事。儀式結束後,有時會有 高僧鬥法 的趣味節目,以舒緩壓抑的氣氛。節目大略步驟為 先用糧食 一般是稻公尺 在地上 畫 出若干級台階 表示n級浮屠 又有若干小和尚隨機地 站 在某個台階上。最高一級台階必須站人,其它任...

藍橋杯 高僧鬥法

古時喪葬活動中經常請高僧做法事。儀式結束後,有時會有 高僧鬥法 的趣味節目,以舒緩壓抑的氣氛。節目大略步驟為 先用糧食 一般是稻公尺 在地上 畫 出若干級台階 表示n級浮屠 又有若干小和尚隨機地 站 在某個台階上。最高一級台階必須站人,其它任意。如圖1所示 兩位參加遊戲的法師分別指揮某個小和尚向上走...

藍橋杯 歷屆試題 高僧鬥法 c

高僧鬥法 時間限制 1.0s 記憶體限制 256.0mb 問題描述 古時喪葬活動中經常請高僧做法事。儀式結束後,有時會有 高僧鬥法 的趣味節目,以舒緩壓抑的氣氛。節目大略步驟為 先用糧食 一般是稻公尺 在地上 畫 出若干級台階 表示n級浮屠 又有若干小和尚隨機地 站 在某個台階上。最高一級台階必須站...