「uoj - 310」黎明前的巧克力

link。


\[\bigoplus_{i = 1}^{n}(f_1x^{a_{i, 1}} + f_2x^{a_{i, 2}} + \dots + f_kx^{a_{i, k}} ) \]

其中 \(\bigoplus\) 表示异或卷积,注意表达式中 \(f\) 的值与 \(i\) 无关明眼人一眼就可以看出,这其实是某模拟赛的某道题。

本题要求的是上式的一个特例,即:

\[\bigoplus_{i = 1}^{n}(1 + 2x^{a_i}) \]

\(\max\{a_{i, j}\} < 2^m\),下给出一个 \(O(n2^k + (m + k)2^{m + k})\) 的算法。


为了行文方便,我们先统一给出沃尔什变换的一种定义。

记 and 运算为 \(\and\);记 \(||x||\) 表示 \(x\) 二进制下 1 的个数;记 \(\operatorname{sgn}_a(b) = \operatorname{sgn}_b(a) = (-1)^{||a\and b||}\)

\(F(x) = \sum_{a=0}^{2^m-1} f_ax^a\),则变换后有 \(\hat F(x) = \sum_{b=0}^{2^m-1}\left(\sum_{a=0}^{2^m-1}\operatorname{sgn}_b(a)f_a\right)x^b\)(记住第 \(b\) 项的形式为 \(\sum_{a=0}^{2^m1}\operatorname{sgn}_b(a)f_a\))。

下文需要用到的某个性质(大概):\(\operatorname{sgn}_p(a\oplus b) = \operatorname{sgn}_p(a)\operatorname{sgn}_p(b)\),证明略。


题目的关键在于:对于所有 \(n\) 个多项式,沃尔什变换之后的所有位都形如 \(\sum_{j = 1}^k (\pm f_j)\)实际上只有 \(2^k\) 种可能的值

我们将注意力放在:对于所有 \(2^m\) 位,我们如何知道这 \(2^k\) 种值分别出现了多少次。之后的工作可以在 \(O((m+k)2^{m+k})\) 的时间复杂度内完成。


对于第 \(p\in [0, 2^m)\) 位,求值为 \(\sum_{j=1}^{k}(-1)^{s_j}f_j\) 的方案数:

\[\sum_{i = 1}^n\left(\prod_{j = 1}^{k}[\operatorname{sgn}_p(a_{i,j}) = (-1)^{s_j}]\right)=\sum_{i = 1}^n\left(\prod_{j = 1}^{k}[(-1)^{s_j}\operatorname{sgn}_p(a_{i,j}) = 1]\right) \]

尝试将艾佛森括号去掉(以下记 \(S = (s_1s_2\dots s_k)_2\),即 \(S\) 的二进制表达为 \(s_1s_2\dots s_k\)):

\[\begin{aligned} ans_{p,S}=& \sum_{i = 1}^n\left(\prod_{j = 1}^{k}\frac{(-1)^{s_j}\operatorname{sgn}_p(a_{i,j}) + 1}{2}\right) \\ =& \frac{1}{2^k}\sum_{i = 1}^n\sum_{T\subseteq \{1,2,\dots,k\}}\left(\prod_{j\in T}(-1)^{s_j}\operatorname{sgn}_p(a_{i,j})\right) \\ =& \frac{1}{2^k}\sum_{T\subseteq \{1,2,\dots,k\}}(-1)^{\sum_{j\in T}s_j}\left(\sum_{i = 1}^n\left(\prod_{j\in T}\operatorname{sgn}_p(a_{i,j})\right)\right) \\ =& \frac{1}{2^k}\sum_{T=0}^{2^k-1}\operatorname{sgn}_S(T)\left(\sum_{i = 1}^n\operatorname{sgn}_p(\bigoplus_{j\in T} a_{i, j})\right) \\ \end{aligned} \]

\(A_{p, T} = \sum_{i = 1}^n\operatorname{sgn}_p(\bigoplus_{j\in T} a_{i, j})\),则上式又可写作 \(ans_{p,S}=\frac{1}{2^k}\sum_{T=0}^{2^k-1}\operatorname{sgn}_S(T)A_{p,T}\),符合沃尔什变换的通项形式。

\(B_{T,q} = \sum_{q=0}^{2^m-1}\left(\sum_{i = 1}^n[\bigoplus_{j\in T} a_{i, j}=q]\right)\),则 \(A_{p,T} = \sum_{q=0}^{2^m-1}\operatorname{sgn}_p(q)B_{T,q}\),又出现了沃尔什变换的通项形式。


如果你喜欢刷思路重复的题:https://codeforces.com/contest/1119/problem/H

posted @ 2020-04-02 22:09  Tiw_Air_OAO  阅读(297)  评论(0编辑  收藏  举报