CF1034E Little C Loves 3 III
太优雅了!
直接暴力卷积是 \(O(n^22^n)\) 的,并没有用到小模数的性质。
一种想法是全并行,将 \(n\) 次 FWT 以及中间的卷积用一个 ull 压起来做,但是只能做模数为 \(2\) 的幂次的情况,这样可以快速取模。
另一种想法是让不满足限制的抵消掉。 \(j,k\) 卷到 \(i\) 要满足两个条件,如果只需要满足任意一个都是可以 \(O(n2^n)\) 做的。不妨假设我们现在只需要满足 \(j|k=i\)。
然后我们考虑去重写每个位置的值,将其写成 \(a_i4^{\operatorname{popcount}(i)}\),最后将每项除掉这个乘上去的系数,然后 \(\bmod 4\)即可。
这样就可以满足条件,因为如果 \(j\&i\not=0\),则就会多出若干个 \(4\),会被 \(\bmod 4\) 消掉,因此可以正确求出答案。