日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

2013\National _C_C++_B\4.高僧斗法

發(fā)布時間:2024/5/7 c/c++ 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2013\National _C_C++_B\4.高僧斗法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

古時喪葬活動中經(jīng)常請高僧做法事。儀式結(jié)束后,有時會有“高僧斗法”的趣味節(jié)目,以舒緩壓抑的氣氛。

節(jié)目大略步驟為:先用糧食(一般是稻米)在地上“畫”出若干級臺階(表示N級浮屠)。又有若干小和尚隨機(jī)地“站”在某個臺階上。最高一級臺階必須站人,其它任意。(如圖1所示)

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

兩法師輪流發(fā)出指令,最后所有小和尚必然會都擠在高段臺階,再也不能向上移動。輪到哪個法師指揮時無法繼續(xù)移動,則游戲結(jié)束,該法師認(rèn)輸。

對于已知的臺階數(shù)和小和尚的分布位置,請你計算先發(fā)指令的法師該如何決策才能保證勝出。

輸入數(shù)據(jù)為一行用空格分開的N個整數(shù),表示小和尚的位置。臺階序號從1算起,所以最后一個小和尚的位置即是臺階的總數(shù)。(N<100, 臺階總數(shù)<1000)

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

例如:
用戶輸入:
1 5 9
則程序輸出:
1 4

再如:
用戶輸入:
1 5 8 10
則程序輸出:
1 3

尼姆博奕論

不清楚啥是尼姆游戲的可以先看一段視頻:

尼姆游戲(學(xué)霸就是這樣欺負(fù)人的)

這道題就是用的尼姆博弈,只要找到怎樣改變使可移動的臺階數(shù)之間異或相加之后結(jié)果為0就是必贏局面,如果沒有移動之前異或相加的值就是0,那么是必輸局面。

構(gòu)造nim模型為:從前到后每兩個為一組,之間的距離-1構(gòu)造為nim的一個堆。當(dāng)堆之間異或為0時,輸出-1,即無必勝技巧;當(dāng)異或不為0時,暴力破解找到最小移動和尚的那步然后輸出,此時注意移動一個和尚,當(dāng)前和尚與上面一個和尚的距離減少,與下面一個和尚距離增加。

Code

if __name__ == '__main__':t, n = 0, list(map(int, input().split()))length = len(n)sub = [0] * lengthfor k in range(0, length, 2):if k > 1:sub[k - 2] = n[k - 1] - n[k - 2] - 1if k % 2 == 0:t ^= sub[k - 2]if not t:print(-1)else:for i in range(length - 1):for j in range(1, n[i + 1] - n[i]):sub[i] -= jif i:sub[i - 1] += jt = 0for m in range(0, length - 1, 2):t ^= sub[m]if t == 0:print(f'{n[i]} {n[i] + j}')breaksub[i] += jif i:sub[i - 1] -= j

不知道為啥,只能過兩個評測。

總結(jié)

以上是生活随笔為你收集整理的2013\National _C_C++_B\4.高僧斗法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。