CF1034E
CF1034E
给两个数列 \(a,b\),编号为 \([0,2^n)\)。
计算 \(c\) 序列为 \(a,b\) 的子集卷积结果,答案对 \(4\) 取模。
\(n\le 21\),时限 \(1s\)
Solution
神题。真的巧妙,完全想不到。
先定义 \(cnt_i=\textrm{popcount}(i)\)
注意到 \(4^{21}\) 远小于 long long,于是这个题我们这样做:
构造序列 \(a'_i=a_i\times 4^{cnt_i}\),\(b_i'=b_i\times 4^{cnt_i}\)。
考虑 \(c_i'=\sum_{j|k=i}a_j'\times b_k'\)
令 \(c_i=\frac{c_i'}{4^{cnt_i}}\mod 4\)。
原理:
-
注意到若 \(cnt_i+cnt_j>cnt_{i|j}\),那么贡献为 \(k\times 4\),即 \(0\)
-
否则如果 \(cnt_i+cnt_j=cnt_{i|j}\),那么贡献为 \(a_i\times b_j\)

浙公网安备 33010602011771号