雨停之后
容斥水平还是太过低手。
题意就是让你对若干个短项式快速做 FWT 或卷积。
考虑要求的式子:
\[f(t) = \sum_{b_1 | b_2 | ... | b_n = t} \prod_{i = 1}^n a_{i, b_i}
\]
这个东西非常不牛,考虑转化:
\[g(t) = \sum_{b_1 | b_2 | ... | b_n \subseteq t} \prod_{i = 1}^n a_{i, b_i}
\]
根据子集反演的结论,有:
\[f(s) = \sum_{t \subseteq s}(-1)^{|s| - |t|} g(t)
\]
我们只需要快速的求出 \(g(t)\) 即可做一遍高维前缀和得到答案。
那么我们将 \(g(t)\) 换一种形式写出来:
\[g(t) = \prod_{i = 1}^n \sum_{j \subseteq t} a_{i, j}
\]
思考实际上对于固定的 \(i\),很多种 \(j\) 后面的求和都是一样的,本质是因为 \(a_i\) 中非零位置极少,事实上考虑的仅是有值的地方的子集,具体来说,我们对于每个 \(a_i\) 分别考虑对 \(g(t)\) 的贡献,看一下能不能分析出来某些事情。
不妨令 \(a_i\) 中有值的位置为 \(U = \{c_1, c_2, ..., c_k\}\),则对于其中每个 \(p \subseteq U\),考虑 \(\sum_{j \in p} a_{i, j}\) 能够被贡献到哪里,显然可以贡献到 \(p\) 的所有超集部分,我们不妨令这个值为 \(v_p\),但是显然如果对于一个 \(t\) 来说,\(p_1 \subseteq t, p_2 \subseteq t\),那么此时就会被算重,考虑容斥,在算 \(p_1, p_2\) 中较大的那个时将较小的贡献容斥掉,你会发现容斥系数和 \(|p|\) 的奇偶性有关,根据某个恒等式,最终可以得出 \(p\) 的贡献值 \(con(p)\) 为:
\[\sum_{q \subseteq p} (-1)^{|p| - |q|} v_q
\]
由于是乘积,我们可以选择先将其打 tag 到一个数组上,最后再跑一遍高维后缀积即可求出 \(g(t)\),最后反演一遍可以得出 \(f(s)\)。

浙公网安备 33010602011771号