[HNOI2011]卡农
[HNOI2011]卡农 [* easy]
问题等价于计算:
固定 \(y\) 然后取 FWT,不难看出来 \(FWT(1+x^{S}y)_i=(1+(-1)^{i\&S} y)\)
于是每个 \(i\) 处的点值形如 \((1+y)^a(1-y)^b\),我们只需要计算处 \(y^m\) 处所有点的点值就可以做 IFWT 还原了。
由于 \(S\) 取遍所有集合,所以 \(i\) 处的点值只关乎 \(i\) 在二进制下 \(1\) 的数量。
同时,还原的系数为 \(IFWT(FWT(F(x)))_0=\frac{1}{2^n}\sum FWT(F(x))_S\)
换而言之,我们只需要对于二进制下每个 \(i\) 表示二进制下 \(1\) 的数量的求出对应的 \(y^m\) 的系数乘以 \(\binom{n}{i}\) 然后加起来求和乘以 \(\frac{1}{2^n}\) 就是答案了。
不难注意到对于 \(d\) 个 \(1\) 而言,按位与的结果恰好有奇数个 \(1\) 的 \(S\) 的数量为:
等价于:
这个式子仅在 \(d=0\) 时不成立,对应次幂为 \(2^{n}\),所以 FWT 后的点值仅有 \(FWT(F(x))_0\) 和 \(FWT(F(x))_S\) 的区别,此时我们只需要计算:
于是答案等价于:
由于只需要计算一项卷积,已经是可以做的了,可以更优么?
其实设 \(F(y)=(1+y)^{t-1}(1-y)^t\) 然后求个导就可以递推了,但是显然这一点也不优美,注意到 \((1+y)(1-y)=(1-y^2)\) 所以答案其实就是 \((1-y)(1-y^2)^{t-1}[y^m]\) 然后分奇偶讨论即可 \(\binom{t-1}{\lfloor{}m/2\rfloor{}}(-1)^{\lceil m/2\rceil}\)

浙公网安备 33010602011771号