還是挺菜不要噴結論參考這裡
就應用尼姆博弈中的結論,先手的高僧取走某個堆(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級浮屠 又有若干小和尚隨機地 站 在某個台階上。最高一級台階必須站...