多校模擬9

A.s1mple

直接做不好做,考慮求出答案數組經過某種變換後的數組,再經過逆變換求出答案數組。考慮求出答案的超集數組。
那麼實際上就是欽定一些位置必須選1,其他位置任意的方案數。
假如欽定了一些位置是1,那麼可以發現方案數只和每一個極長1連續段有關,於是可以暴力枚舉每個極長連續1段的長度,總狀態數爲n的整數劃分數。
給出的矩陣看成鄰接矩陣,那麼\(b_{i,j}=1\)等價於\(i\)\(j\)有一條邊。那麼極長連續1段等價於可以將這個某個點集連成一條鏈。
假如已經確定了\(f(S)\)表示將\(S\)內的點集連成一條鏈的方案數,並且枚舉了一個n的劃分,那麼只要將這些\(f(S)\)進行子集卷積,方案數就是\(2^n-1\)處的係數。由於集合的總長度恰好是n,所以這裏的子集卷積得到的最後一項係數恰好就是對的。
於是可以得到答案的超集數組,然後進行\(fwt\)即可\(O(1)\)詢問。

B.s2mple

答案可以轉化爲給\(S[l:r]\)加上一個前綴或者一個後綴的方案,兩種方案不同當且僅當前綴不同或者後綴不同。
加上前綴可以考慮這個節點在\(SAM\)上的子樹,那麼只要求出子樹每個節點能夠加上的本質不同後綴數,這個東西可以在\(SAM\)上走轉移邊\(dp\)得到。
於是預處理一下每個節點的子樹和就行了。

C.s3mple

首先把整個序列中的最大值提出來,然後可以劃分成兩個子問題,於是可以枚舉左右的大小和總權值暴力\(dp\)
然後將\(dp\)數組寫成生成函數,發現轉移實際上就是做卷積。然後可以用點值來做\(dp\)
現在的問題是詢問,要插值出這個多項式的某項係數,那麼直接將拉格朗日插值的式子展開即可。
發現複雜度有點高,所以可以先求出所有多項式的積,求某一項的時候除掉一個多項式即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章