省選模擬56

2022-03-26 19:32:48 字數 1481 閱讀 1863

題意:n堆石子,第\(i\)堆有\(a_i\)個,可以刪除掉為d的倍數個數的石子堆,求後手必勝的刪除方案數。\(n<=5e5,d<=10,a_i<=1e6,\sum\limits_^n a_i<=1e7\)

首先是nim博弈的結論:存在後手必勝的充要條件為\(a_i\)異或和為零

對於\(n<=50,a_i<=10000\),設\(f[i][j][k]\)表示考慮了前\(i\)堆石子,刪除堆數\(%d=j\),未刪除的堆xor值為\(k\)的方案數

此時沒有用到\(\sum\limits_^n a_i<=1e7\)的條件

把\(a_i\)按降序排序,那麼每次不小於\(a_i\)最高位+1位的k都不可能貢獻答案,這樣的話複雜度為\(o(nd\times cnt[2^,2_i-1]2_i)\),不會超過\(o(nd\sum a_i)\)

題意:n個點m條邊的有向圖,q次詢問s->t走d條邊且s只在起點t只在終點經過的方案數。\(n<=100,d<=50,q<=5e5\)

暴力的話直接dp\(f[s][i][t][d]\)表示起點s終點t現在在i走了d條邊的方案數,然後統一回答。

限制只有兩個,可以考慮容斥。

設\(f[i][j][k]\)表示走恰好k步\(i->j\)且不經過\(i,j\)的方案數

\(g[i][j][k]\)表示恰好走k步\(i->j\)的方案數,這個沒有限制直接列舉起點拓展終點dp,複雜度為\(o(n^3d)\)。

\(h[i][j][k]\)表示恰好走k步\(i->i\)且不經過\(j\)的方案數

考慮如何求答案\(f\)

用總方案數-不合法的,前者顯然是g,後面的分類為第乙個不合法為i或j

有\(f[i][j][k]=g[i][j][k]-\sum\limits_^h[i][j][d]g[i][j][k-d]-\sum\limits_^f[i][j][d]g[j][j][k-d]\)

\(h[i][j][k]=g[i][j][k]-\sum\limits_^h[i][j][d]g[i][i][k-d]-\sum\limits_^f[i][j][d]g[j][i][k-d]\)

同時注意\(i=j\)的情況會被多減一次。

題意:\(n\times m\)的01方格圖,定義操作為把1的所在行和列異或一,本身變為0。每次對圖中所有1同時操作,權值為1的個數,直到圖中無1。\(n,m<=1e5\)

定義\(f[i]\)為i行1個數的奇偶性,\(g[i]\)為i列同理

那麼\((i,j)\)一輪操作後會變成\(f[i]\ xor\ g[j]\)

因為只關心每個格仔所在的行和列有多少1,而不關心具體位置,交換行和列對答案沒有影響。

於是把\(f[i]=0\)的放上邊,\(g[j]=0\)的放左邊,會形成4個塊,每個塊要變化產生的值都是相同的,將問題的規模縮小到了\(2\times 2\),除了初始方格圖只有左下和右上兩個塊會有貢獻,同時可以再次按照此規則移動行列,若不迴圈則最多\(2^4\)次。

現在的問題在於求出初始圖的貢獻和\(f[i],g[i]\),後者差分即可,前者用掃瞄線+線段樹可以解決。

省選模擬56

對於這種取石子的題乙個經典結論就是先手必敗當且僅當所有堆的石子數異或和為0。所以就有了乙個暴力的dp思路,f i j k 表示當前列舉到第i堆石子,選取的石子堆數模d為j,異或和為k的方案數,轉移顯然。然後發現題中給了乙個奇怪的條件,保證所有堆石子數總和不大,所以就不難想到給石子數排序,然後每次只轉...

省選模擬56 題解

容易發現這個問題的 sg 值就是每堆的石子個數的異或和。問題是後手能贏,也就是求刪除 d 的倍數個石子,使得剩餘石子的異或和恰好為 0 的方案數。然後發現直接 dp 複雜度就是 o n d max a i 的。發現題面中給出了乙個很特殊的限制,所以考慮如何做到每次 o d a i 的轉移。容易發現給...

考試 省選56

直接全都wa爆了。t1博弈論模型,其實就是轉化成 xor 和為 0 我們考慮樸素的 dp dp i j k 設為前 i 個元素,去掉的元素個數 mod d 為 j xor 和為 k 的方案。暴力轉移即可。考慮最終答案是 dp n 0 0 我們降序排序 那麼如果 upbit a i 2 j 說明轉移過...