[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})