省選模擬56 題解

2022-03-16 18:34:37 字數 1110 閱讀 1170

容易發現這個問題的 $sg$ 值就是每堆的石子個數的異或和。

問題是後手能贏,也就是求刪除 $d$ 的倍數個石子,使得剩餘石子的異或和恰好為 $0$ 的方案數。

然後發現直接 $dp$ 複雜度就是 $o(n*d*\max(a_i))$ 的。

發現題面中給出了乙個很特殊的限制,所以考慮如何做到每次 $o(d*a_i)$ 的轉移。

容易發現給 $a_i$ 排個序就好了。

坑點是不能全刪完,所以當 $d$ 是 $n$ 的因數的時候需要給答案減乙個 $1$。

容易發現不同的詢問個數並不多,所以這題肯定要預處理答案。

這樣直接做乙個 $dp$,複雜度就是 $o(n^4d)$的。

然後發現這個 $n^4$ 是列舉點對+列舉邊,肯定後者省不掉,所以想一下怎麼把列舉點對轉化為列舉乙個點。

比如列舉起點,那考慮弄乙個容斥出答案。

現在不妨讓路徑上都不經過起點,那麼只要欽定路徑上出現若干個終點,即可容斥出路徑上恰好出現 $0$ 次終點。

然後考慮每個欽定序列的方案數,發現這個玩意有兩種形式。

設 $f(i,j,x,k)$ 表示由 $i$ 走 $k$ 步到達 $j$,路徑上不能經過 $x$ 的方案數。

那麼乙個是 $f(s,t,s,k)$ ,乙個是 $f(t,t,s,k)$ 。

前者直接做一下 $o(n^3d)$ 的 $dp$ 就完事了,後者再套乙個類似的容斥即可轉化為沒有任何限制,也就是個直接 $dp$。

但是容斥的方法是列舉序列,這肯定不現實,容易發現只關心終點的最後一次出現,所以寫成類似揹包 $dp$ 的形式就好了。

考慮設 $f_x$ 表示第 $x$ 行 $1$ 出現次數的奇偶性, $g_x$ 同理表示列。

然後發現一輪操作之後,有 $col_=f_i \ xor \ g_j$。

然後有乙個想不到但挺顯然的結論,就是說行、列的交換是不影響答案的。

那麼發現把 $f,g$ 的兩種取值分別移動到角落,第一輪操作之後,形成的就是四個矩形。

既然第一輪是矩形,以後的每一輪這個矩形始終存在,並且每個矩形中每個點的顏色是相同的。

所以直接模擬,因為只有四個矩形,當超過 $16$ 輪模擬仍然沒有結束,那肯定就是操作無限次了。

所以問題只剩下如何求初始的 $f,g$ ,發現這個搞個掃瞄線就好了。

省選模擬56

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

省選模擬56

題意 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...

省選模擬104 題解

a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...