1. 程式人生 > 其它 >NOI 前口胡紀要

NOI 前口胡紀要

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)\}\)

的數量級,取出後 \(\lceil\log_2K\rceil\) 位記作 \(t\)

如果 \(t>=K\) 這樣的元素只會有 \(\Theta(K)\) 個,否則退位會影響到 \(c\) 箇中的每一個,而每個退到的位都有 \(K\) 種可能,那麼總數量級為 \(\Theta(cK)\)

此時得到的一種做法就是直接跑 \(\ln,\exp\) 來計算每種 \(\rm EGF\) 的快速冪,但是複雜度很高

嘗試對於 \(\Theta(cK)\)\(\rm EGF\) 固定 \(K+1\) 箇中的一個 \(y^t\),此時做 \(\rm FWT\) 前的序列只有一個位置有值,那麼 \(\rm FWT\)

後每個 \(x\) 上的元素均為 \(\pm \cfrac{y^t}{t!}\) 中的一個

那麼將 \(K+1\)\(\pm 1\) 壓下來做 \(\rm \ln,\exp\) 再快速冪即可通過

這種通過 轉變考察維度 來減少運算量的技巧非常厲害!