BZOJ4035 陣列遊戲,博弈論 分塊亂搞

2021-07-28 11:56:17 字數 1072 閱讀 5824

傳送門

思路:

起初思路挺好,後來就比較奇怪的一道題目

玩法很像sdoi2016r2的硬幣遊戲,不過那個題目直接暴力sg就可以過,本題直接套規則只有30分;

稍微優化一下,不列舉k,直接每次xor一下後繼狀態的sg,可以得50分,複雜度o(

nlogn)

; 70分需要乙個比較好玩的結論: 如果⌊

ni⌋=

⌊nj⌋

,那麼sg

(i)=

sg(j

) 我們可以歸納證明一下: 當⌊

ni⌋=

1 時,顯然sg

(i)=

1 ,因為它只能令自身反色 當⌊

ni⌋>

1 時,sg

(i) 由⌊n

2i⌋,

⌊n3i

⌋ ..的sg值決定,又⌊n

ij⌋=

⌊⌊ni

⌋j⌋ ,所以⌊n

i⌋相同的位置後繼狀態相同,sg值也就相同了

然後就可以分塊求了,⌊n

i⌋的取值最多有2n

√ 種,轉移時考慮落在當前區間內的後繼點奇偶就可以了,複雜度o(

n) o

(n) ,還有什麼玄學/hash,表示不是很懂,不過裡面所說的合併sg給了我啟發,因為有很多⌊n

i⌋不相等的塊sg值相同,這個優化比較奇怪但確實很好用,在n=

109 s

g 函式都不大

**:

#include

#include

#include

using namespace std;

int n,m,q,cnt;

intpos[64005],f[64005];

struct nodeda[64005];

bool vis[1000];

void dp()

for (int j=1;;++j)

if (!vis[j])

for (int j=0;j<=mx;++j) vis[j]=0;

}}main()

}

bzoj 4600 硬幣遊戲 博弈論

反硬幣操作與c無關,只與2和3的指數有關。設sg i j 為2和3的指數分別為i和j時,且前面的硬幣都不可翻時的sg值。然後就可以列舉p,q,對於每乙個p,q,它的sg值為 sg i k q j 的異或和以及sg i j k q 的異或和,求mex。include include include d...

魔法遊戲 博弈論

題目大意 給一顆樹,每個位置有乙個權值,每次乙個人可以選擇森林中的某棵樹的根節點,設其權值為a aa,那麼這個人可以選擇乙個k 2,a 1 k in 2,a 1 k 2,a 1 然後讓a aa變成 ak left lfloor frac ak right rfloor ka 如果乙個點權值變為0那麼...

博弈論 Nim遊戲

這種遊戲稱為nim博弈,遊戲過程中面臨的狀態成為局面。n im nimni m博弈不存在平局,只有先手必勝和先手必敗兩種情況。定理nim 博弈先手 必勝,當 且僅當a 1xora2 xor xoran 0nim博弈先手必勝,當且僅當 a 1 texta 2 text cdots text a n n...