藍橋杯 高僧鬥法

2021-09-10 23:04:40 字數 1131 閱讀 5557

古時喪葬活動中經常請高僧做法事。儀式結束後,有時會有「高僧鬥法」的趣味節目,以舒緩壓抑的氣氛。

節目大略步驟為:先用糧食(一般是稻公尺)在地上「畫」出若干級台階(表示n級浮屠)。又有若干小和尚隨機地「站」在某個台階上。最高一級台階必須站人,其它任意。(如圖1所示)

兩位參加遊戲的法師分別指揮某個小和尚向上走任意多級的台階,但會被站在高階台階上的小和尚阻擋,不能越過。兩個小和尚也不能站在同一台階,也不能向低階台階移動。

兩法師輪流發出指令,最後所有小和尚必然會都擠在高段台階,再也不能向上移動。輪到哪個法師指揮時無法繼續移動,則遊戲結束,該法師認輸。

對於已知的台階數和小和尚的分布位置,請你計算先發指令的法師該如何決策才能保證勝出。

輸入資料為一行用空格分開的n個整數,表示小和尚的位置。台階序號從1算起,所以最後乙個小和尚的位置即是台階的總數。(n<100, 台階總數<1000)

輸出為一行用空格分開的兩個整數: a b, 表示把a位置的小和尚移動到b位置。若有多個解,輸出a值較小的解,若無解則輸出-1。

博弈介紹:

尼姆博弈變形。把小和尚兩兩一組,兩兩之間的空位就是石子,因為第2個和第3個之間的位置是無用的。

處理出來之後異或即可。

第一步如何走,就列舉第i個可以走的位置,然後再異或。滿足輸出,不滿足繼續。

1 #include2

using

namespace

std;34

char buf[250];5

int a[110];6

7int fun(int

n) 12

13int

main()

22if(cnt&1

) 26

//for(int i=0;i27

bool flag=false;28

for(int i=0;i1;i++)

37 a[i]=st;38}

39if(flag) break;40

}41if(!flag) puts("-1"

);42

}43 }

posted @

2019-02-14 19:16

acmerszl 閱讀(

...)

編輯收藏

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

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

藍橋杯 高僧鬥法 尼姆博弈

還是挺菜不要噴結論參考這裡 就應用尼姆博弈中的結論,先手的高僧取走某個堆 a i 的k個石子後使得a1 a2 a i k an 0時 對方面臨的就是奇異局面必敗。include include using namespace std intmain while cin a s 得到s個和尚的座標 i...

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

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