古時喪葬活動中經常請高僧做法事。儀式結束後,有時會有「高僧鬥法」的趣味節目,以舒緩壓抑的氣氛。
節目大略步驟為:先用糧食(一般是稻公尺)在地上「畫」出若干級台階(表示n級浮屠)。又有若干小和尚隨機地「站」在某個台階上。最高一級台階必須站人,其它任意。(如圖1所示)
兩位參加遊戲的法師分別指揮某個小和尚向上走任意多級的台階,但會被站在高階台階上的小和尚阻擋,不能越過。兩個小和尚也不能站在同一台階,也不能向低階台階移動。
兩法師輪流發出指令,最後所有小和尚必然會都擠在高段台階,再也不能向上移動。輪到哪個法師指揮時無法繼續移動,則遊戲結束,該法師認輸。
對於已知的台階數和小和尚的分布位置,請你計算先發指令的法師該如何決策才能保證勝出。
輸入資料為一行用空格分開的n個整數,表示小和尚的位置。台階序號從1算起,所以最後乙個小和尚的位置即是台階的總數。(n<100, 台階總數<1000)
輸出為一行用空格分開的兩個整數: a b, 表示把a位置的小和尚移動到b位置。若有多個解,輸出a值較小的解,若無解則輸出-1。
1 5 9
1 41 5 8 10
1 3nim博弈。需要注意的就是這裡需要把兩個分成一組,之間的間隔即為石子數。如1 5 8 10. 1-5,8-10這樣分(5-8之間不能算作一堆石子,這段石子在博弈贏輸問題上沒有實際的作用)。如果是奇數個,最後乙個分組就當做0個石子。
這樣就轉化為了和nim博弈類似的情況,只不過nim石子數隻可能越取越少,而這裡石子數可能越取越多(因為當變化5-8的時候,就相當於1-5這堆石子變多了),但策略是一樣的,都是當你面對非平衡局勢的時候必贏(所有值亦或不為0,所有堆二進位制指數相同的個數不都為偶數個),你的目標是把狀態轉化為平衡局勢(所有值亦或為0,所有堆二進位制指數相同的個數都為偶數個)
還有需要注意輸出第一步的時候,可以變化1-5的距離,即縮小間距,也可以變化5-8的距離,即擴大間距。
1 #include2intmain()3;
5int b[105]=;
6int i=0;7
char
ch;8
while(1)9
16int len=i+1;17
if(len&1) a[len++]=a[i]+1
;18 i=0;19
for(int j=0;j2)20
2324
int ans=0;25
for(int j=0;j)
2629
if(ans==0) printf("
-1\n");
30else
314647}
48else
if((ans^b[j/2]^(a[j+1]-k-1))==0)49
5455}56
if(tp) break;57
}58}59
return0;
60 }
歷屆試題 高僧鬥法 階梯博弈
思路 遊戲結束狀態是所有和尚都無法移動,這是p態,把相鄰的兩個和尚看作乙個狀態,例如1 5 8 10,可以看作 1,5 和 8,10 兩個和尚中間的樓梯數作為sg值。假設當前是n態 sg異或值大於0 可以一步讓異或值變為0即p態,而且p態只能變成n態,即符合nimm博弈的性質,直接就能判斷是否能獲勝...
歷屆試題 高僧鬥法
歷屆試題 高僧鬥法 時間限制 1.0s 記憶體限制 256.0mb 問題描述 古時喪葬活動中經常請高僧做法事。儀式結束後,有時會有 高僧鬥法 的趣味節目,以舒緩壓抑的氣氛。節目大略步驟為 先用糧食 一般是稻公尺 在地上 畫 出若干級台階 表示n級浮屠 又有若干小和尚隨機地 站 在某個台階上。最高一級...
藍橋杯 歷屆試題 高僧鬥法 (尼姆博弈)
時間限制 1.0s 記憶體限制 256.0mb 問題描述 古時喪葬活動中經常請高僧做法事。儀式結束後,有時會有 高僧鬥法 的趣味節目,以舒緩壓抑的氣氛。節目大略步驟為 先用糧食 一般是稻公尺 在地上 畫 出若干級台階 表示n級浮屠 又有若干小和尚隨機地 站 在某個台階上。最高一級台階必須站人,其它任...