[HNOI2011]卡农

[HNOI2011]卡农 [* easy]

问题等价于计算:

[prod_{S e varnothing} (1+x^{S}y)[x^{varnothing}y^m] ]

固定 (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) 的系数乘以 (inom{n}{i}) 然后加起来求和乘以 (frac{1}{2^n}) 就是答案了。

不难注意到对于 (d)(1) 而言,按位与的结果恰好有奇数个 (1)(S) 的数量为:

[2^{n-d}cdot sum_{i} [imod 2=1]inom{d}{i} ]

等价于:

[2^{n-d}cdot sum_{i} frac{(-1)^{i+1}+1^{i+1}}{2}inom{d}{i}=2^{n-d}igg(2^{d-1}+0igg)=2^{n-1} ]

这个式子仅在 (d=0) 时不成立,对应次幂为 (2^{n}),所以 FWT 后的点值仅有 (FWT(F(x))_0)(FWT(F(x))_S) 的区别,此时我们只需要计算:

[(1+y)^{t-1}(1-y)^t[y^m] ]

于是答案等价于:

[frac{1}{2^n}igg((1+y)^{2^n-1}[y^m]+(2^n-1)(1+y)^{t-1}(1-y)^{t}[y^m]igg) ]

由于只需要计算一项卷积,已经是可以做的了,可以更优么?

其实设 (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]) 然后分奇偶讨论即可 (inom{t-1}{lfloor{}m/2 floor{}}(-1)^{lceil m/2 ceil})

原文地址:https://www.cnblogs.com/Soulist/p/14012900.html