NOI 前口胡紀要
阿新 • • 發佈:2022-05-24
CF1408I
先計算出來全部 \(a_i\) 的異或和 \(X\),減小若干 \(a_i\) 後再求異或和本質上是讓 \(\rm X\) 異或上 \(a_i\oplus (a_i-d)\)
本題中的概率本質上是算序列數,所以設每個元素的 \(\rm EGF\) 為
\[F(n)=\sum_{i=0}^{K}\cfrac{x^{a_n\oplus (a_n-i)}y^i}{i!} \]其中 \(x\) 一維的指數運算是異或而 \(y\) 這維是加法,表示被操作的次數
如果可以求出來 \(\rm EGF\) 的乘積本題便迎刃而解了
考察本質不同 \(\rm K\) 元組 \(\{x\oplus (x-1),\dots x\oplus(x-K)\}\)
如果 \(t>=K\) 這樣的元素只會有 \(\Theta(K)\) 個,否則退位會影響到 \(c\) 箇中的每一個,而每個退到的位都有 \(K\) 種可能,那麼總數量級為 \(\Theta(cK)\)
此時得到的一種做法就是直接跑 \(\ln,\exp\) 來計算每種 \(\rm EGF\) 的快速冪,但是複雜度很高
嘗試對於 \(\Theta(cK)\) 種 \(\rm EGF\) 固定 \(K+1\) 箇中的一個 \(y^t\),此時做 \(\rm FWT\) 前的序列只有一個位置有值,那麼 \(\rm FWT\)
那麼將 \(K+1\) 個 \(\pm 1\) 壓下來做 \(\rm \ln,\exp\) 再快速冪即可通過
這種通過 轉變考察維度 來減少運算量的技巧非常厲害!