可以看出來兩人的遊戲是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 輸入...