alice與bob在一起玩乙個遊戲。現在有乙個字串s,每個人可以選擇字串中的某乙個區間和一種字元,刪除這個區間內的所有該字元(需要刪除字元的數量至少為1)。從alice開始,alice與bob輪流進行進行這個操作,若在某個玩家刪除前,字串已經為空,則該玩家獲勝。
假設alice和bob都會按照其最優的解法刪除,alice想知道,她是否可以獲勝。
1 ≤l
en(s
)≤
100000
1\le len(s) \le 100000
1≤len(
s)≤1
0000
0 字串中的字元均為小寫字母。
樣例1:這個題實際就是取石子問題,有 n輸入:s=「ab」
輸出:true
解釋:1.alice選擇刪除s[0:1]中的』b』 ==> 「a」.
2.bob選擇刪除s[0:0]中的』a』 ==> 「」.
3.字串為空,因此alice獲得勝利.
樣例2:
輸入:s=「aabb」
輸出:false
解釋:無論alice如何進行選擇均無法獲勝
樣例3:
輸入:s=「acacbcbc」
輸出:true
解釋:alice只需要在第一步中刪除s[1:7]中的所有』c』 ==> 「aabb」
即可保證必勝。
nn 堆石子,兩個人輪流從其中某一堆中取走至少乙個石子,最後不能取的為贏家,每次只能從一堆中取,可以取完這堆,但不能不取。
這裡注意是取走最後乙個石子的人必輸。
這種博弈被稱為反nim博弈,先手必勝的情況有兩種,只要是這兩種情況之一就為先手必勝,
一:各堆石子數目異或結果不為零,且至少有一堆石子數目大於1
二:各堆石子數目異或結果為零,且所有堆石子數目均為1;
class
solution
bool allisone =
true
;int x =0;
for(
auto
&it : mp)
}return x &&
!allisone ||
!x && allisone;}}
;
取石子 博弈論 Nim遊戲
題目大意 有n堆石子,第i堆有ai個。每次可以選擇乙個x,選擇乙個質數p滿足p x,選擇乙個0 y a x 然後將y個石子從x移動到x p。問先手有多少種第一步移動的測率能夠必勝?答案除以總方案數輸出。n 106,0 ai 109n 10 6,0 ai 10 9題解 從最簡單的情況推導,什麼情況下是...
博弈論 Nim博弈 反Nim博弈 SG函式
nim遊戲 hdu1846 若各堆石子異或和為不為零,則先手勝 後手當且僅當異或和為零時取勝 此題問要想先手取勝第一步的取法,考慮到上述引理,只需遍歷一遍石子找到異或和的最高位匹配的個數。int a 105 int main return0 view code hdu 1848 在上題的基礎上取法只...
博弈論 Nim博弈
1.nim博弈的起源很早,至於歷史我們就不再說了,直接說它的使用場景。1 依舊是兩個人博弈,但是物品時n堆,每一堆有ai個。2 每個人可以挑選一堆取走若干個,但是不能不取。3 最先取完所有物品的人獲勝。4 結論 所以堆的物品的數量異或起來是0,先手必敗。2.乙個nim博弈的例項 nim博弈。乍一看這...