zoukankan      html  css  js  c++  java
  • [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})

  • 相关阅读:
    RocketMQ消息模型
    RabbitMQ消息模型
    消息队列选择
    消息队列使用场景
    synchronized底层实现
    Java 内存模型
    MySql中的字符数据类型
    php页面编码与字符操作
    git学习总结
    SESSION机制
  • 原文地址:https://www.cnblogs.com/Soulist/p/14012900.html
Copyright © 2011-2022 走看看