A. 石子游戲
容易發現答案大約是log級別的,然後可以考慮一個暴力dp,記錄當前一共選擇了幾個。
發現dp的轉移順序並不是必要的,而重複的轉移也一定不優,所以可以考慮將所有狀態放到一起轉移,然後就可以fwt來優化了。
fwt的過程中不用每次都轉化回去,直接用點值展開一項就可以判斷有沒有解。
B. 函數
是一種叫做powerful number的奇怪東西的模板題。
定義就是所有質因子的冪次不小於2。然後令$f=g*h$,其中$g(x)=x^k$,那麼由於$h=f/g$,所以h也是積性函數,展開f在質數處的取值可以的得到h在非power number處的取值一定爲0。
然後問題就是求出來h在所有powerful number處的取值,歸納可以得到$h(x)=x^k-x^{2k}$。
由於符合條件的數的個數很少,所以暴力搜索出來然後對於每個都計算貢獻就行了。
C. 畫
假如不存在限制,那麼找到所有數最高的二進制位,將所有數根據這一位爲0或1分成兩組。然後分情況討論:
1.若爲1的一組這一位全部填1,那麼向下遞歸。
2.若爲1的一組有任意一個數這一位不是1,那麼其他數只要滿足了最高位的限制,低位不管怎麼填都可以由這個數調整。
所以第一部分向下遞歸,第二部分暴力dp統計答案。
考慮限制,就整個容斥,欽定不滿足的邊集統計貢獻。由於邊集很大,所以考慮欽定整個點集相同,然後計算邊集的方案數進行容斥。邊集的方案數可以通過減去不合法的得到。
然後用dp將這些點集的連通塊拼到一起即可。
考慮這個dp,發現我們要計算貢獻只需要知道大小爲奇數的連通塊的$limit$最小的點,所以將所有這樣的點壓到狀態裏。
爲了計數方便,我們欽定轉移必須包含剩餘集合中$limit$最小的點。然後暴力進行轉移。複雜度看似很迷,實際上還是正確的。