HDU 6610 Nim博弈 帶修莫隊

2021-10-07 18:23:21 字數 683 閱讀 6483

可以看出來兩人的遊戲是nim博弈 所以如果區間內的數異或和不為0 那麼alice 必勝  

簡單分析一下我們肯定要做乙個字首異或  然後再莫隊就行  因為bob會對序列進行修改 所以我們需要用帶修莫隊   然後就變成乙個板子題目了

帶修莫隊 在塊大小為 n^(2/3) 理論上複雜度最優

#include#include#includeusing namespace std;

const int n = 1e5+10,m = 1e6+100;

typedef long long ll;

int xsum[n],p[n],sqn,a[n],blk;

ll tx[m],ans[n],ret;

struct node

int main()

for(int i = 1; i <= m; i++);

}else p[++kcnt]=l;

} sort(q+1,q+1+qcnt);

int l=1,r=0,t=0;

for(int i = 1; i <= qcnt; i++)

for(int i = 1; i <= qcnt; i++) printf("%lld\n",ans[i]);

} return 0;

}

hdu5996 階梯nim博弈

第一次接觸到階梯nim博弈 看了這篇部落格,講得比較清楚 大意就是給一顆樹 樹的節點上放有石子,每次只能把石子往父節點移動一下,規定不能移動者輸。看了階梯博弈後大概就能懂這題的意思了,直接把深度為奇數的節點異或起來就可以了 include include include include includ...

hdu 4994 前後有序Nim遊戲

nim遊戲變成從前往後有序的,誰是winner?如果當前堆數目為1,玩家沒有選擇,只能取走。遇到到不為1的堆,則當前回合行動者可以選擇下次選擇的先後手。考慮之後的狀態為s,如果s為必敗態,則玩家可以取完當前堆,下輪變後手,否則,將當前堆數目變為1,下輪先手。include include inclu...

HDU2176 Nim博弈 SG函式求解

m堆石子,兩人輪流取.只能在1堆中取.取完者勝.先取者負輸出no.先取者勝輸出yes,然後輸出怎樣取子.例如5堆 5,7,8,9,10先取者勝,先取者第1次取時可以從有8個的那一堆取走7個剩下1個,也可以從有9個的中那一堆取走9個剩下0個,也可以從有10個的中那一堆取走7個剩下3個.input 輸入...