集訓隊作業2018: 青春豬頭少年不會夢到兔女郎學姐(多限制容斥)
阿新 • • 發佈:2018-11-17
前言:
雖然這道題的名字有點那啥,但是題還是很好的,聽說是某道原題的加強版。
題意:
給定
種顏色的球,第
種顏色的球數量為
個,保證
,對於這所有
的排列,一種排列的貢獻可以如下計算:先把這個序列首尾相連,然後把所有相鄰且顏色相同的段拿出來,貢獻為他們的長度之積,求所有貢獻和。
題解:
這道題一開始就想偏到列舉迴圈節去了,看了題解才知道可以用容斥來算。
首先考慮算貢獻時首尾不相連怎麼做,這個時候我們可以列舉 被分為了 段,設其代價和為 ,那麼貢獻為 , 表示所有 個段拼起來相鄰不同的方案數。
這個其實可以用多個顏色來一起容斥,我們再列舉一下最後每種顏色有幾個斷點被合併了,可以得到:
然後其實就是要算這個玩意兒:
我們可以考慮把每個顏色球關於
的egf搞出來,相當於是對每個
,求:
然後分治FFT即可得到求答案的egf。
考慮一下 的egf怎麼求,觀察一下這個 ,不難發現其等於 ,相當於先分成 段,插 個板,然後每段選 個數,這樣兩個組合數卷積也可以FFT優化一下。
然後考慮一個環怎麼做,我們強制規定這個序列從1開頭,不以1結尾就行了, 的egf那個 要變成 ,可以算出從1開頭的方案數, 的egf的 變成 可以算出以1開頭且以1結尾的方案數,減一下就可以得到以1開頭不以1結尾的方案數。
不過注意一下,這裡如果每 個就出現迴圈的話,最後會計算