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

  • 相关阅读:
    Linux 实例如何开启 MySQL 慢查询功能
    20步打造最安全的Nginx Web服务器
    解决java compiler level does not match the version of the installed java project facet
    maven项目重构目录
    【JeeSite】角色和权限的修改
    【JeeSite】区域和菜单管理
    【JeeSite】登录和主题切换
    【JeeSite】用户管理
    一个程序员的故事
    maven项目发布到Tomcat丢失jar包
  • 原文地址:https://www.cnblogs.com/Soulist/p/14012900.html
Copyright © 2011-2022 走看看