• APIO2022笔记集合幂级数


    可结合IOI2022集训队论文hehezhou《更一般的DFT》阅读和理解。

    DFT-IDFT 干的是这么一件事(这里用异或卷积举例):
    构造函数 \(FWT:C \rightarrow C\) 使得 \(FWT\) 有线性性,通过快速计算 \(FWT(C)=FWT(AB)=FWT(A) \cdot FWT(B)\) 来加速卷积。

    有线性性是指:\(FWT(A+B)=FWT(A)+FWT(B) , FWT(AB)=FWT(A) \cdot FWT(B)\)

    那么这个变换的过程实际上是可以用矩阵表示的,也就是要满足 \(g_{k,i}g_{k,j} = g_{k,i \oplus j}\)

    具体地,对于我们熟悉的快速沃尔什变换FWT,每位的DFT矩阵分别是 \(\begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix}\) ,做IDFT时用其逆矩阵。

    而这个矩阵实际上也就是 FFT 中的范德蒙德矩阵 \(\begin{bmatrix} (\omega_2^0)^0 & (\omega_2^0)^1 \\ (\omega_2^1)^0 & (\omega_2^1)^1 \end{bmatrix}\) ,也就是说,FWT是多元的FFT,每一位都是一个元。另外由此可以看出,FWT 时对每个元(位)的处理顺序是不重要的。

    由这个矩阵得到一个比较有用的性质是 \(FWT(A)[i] = \sum_{j=0}^{2^n-1} (-1)^{\lvert i \& j \rvert} A^j\) ,以下有几道例题利用了该性质。

    UOJ310. 【UNR #2】黎明前的巧克力

    有 n 个巧克力,每个有属性 ai。你需要从中选出两个不交的集合,使得这两个集合权值相同(权值为集合内巧克力属性的异或和)。问方案数对 998244353 取模的余数。

    (题意直接复制课件了)

    对于每个异或和为零的集合,任意划分都是合法的,容易发现不会算重,于是给每个位置2的贡献,统计异或和为 0 的集合的总贡献。
    显然是 \([x^0]\prod(1+2x^{a_i})\)

    一个直观的想法是直接全部 FWT 了乘起来,但是 \(n\) 非常大,这是不可行的。

    在建立了对上述性质的认知后,知道常数项一定对所有位置都是正贡献,另一项对任意一个位置贡献必然是 \(2\)\(-2\) ,因为 FWT 后的数组只有 \(-1\)\(3\)

    同时利用 FWT 的线性性,将所有加起来一起求 FWT ,每个位置设贡献为 \(-1\)\(3\) 的各有 \(a\)\(b\) 个,解个二元方程就行。

    另外,这里我们要求的只有最终的 \([x^0]\) 项,观察变换矩阵知可以把所有值加起来除 \(len\) 得到答案。

    CF1119H Triple

    题面太长不想写了……link

    也是跟上一题一样的需要加速 FWT ,采取一样的思路,加起来 FWT 后再解方程。
    具体地,将 \(x^{c_i}\) 先拎出来,状态也就只剩四种了,未知数有四个那么方程也必须有四个,和为 \(0\)\(FWT(\sum x^{a_i})\)\(FWT(\sum x^{b_i})\) 显然可用。
    还需要一个方程?联系 \((-1)^{\vert a_i \& j \vert} (-1)^{\vert b_i \& j \vert} = (-1)^{\vert (a_i \oplus b_i) \& j \vert}\) 于是可以把 \(FWT(\sum x^{a_i \oplus b_i})\) 也作为方程,\(X,Y\) 同号则贡献为 1 ,否则为 -1。

    洛谷 P7526 Virtual Self

    一支水晶由 \(m\) 簇粒子合成,其中每一簇粒子都有美丽度,而一支水晶
    的美丽度就是合成它的所有粒子的美丽度的异或和。
    对于每一个 \(i \in [0,2^w)\),恰好有 \(v_i\) 簇美丽度为 \(i\) 的粒子。
    对所有 \(k \in [0,2^w)\),求出有多少种方案能够合成一支美丽度为 \(k\) 的水晶。

    Ps:所有粒子互不相同。

    一个朴素的想法:把所有粒子都 FWT 了,枚举选哪些乘起来,把乘起来的数组 FWT 后 全部对应相加。

    联系到 FWT 的线性性,不如直接把所有乘得到的数组先加起来再 FWT ,这样只需要 FWT 一次。用“黎明前的巧克力”的方法求出每个位置有多少 \(1\)\(-1\) 的贡献,直接计算当前位置的所有方案总和,这个计算用生成函数写出来后可以发现是卷积的形式,NTT 预处理即可。

    Ps:这题似乎还有一档防AK的部分分,跟这个做法没什么关系,就不讲了吧……

  • 相关阅读:
    Security基础(二):SELinux安全防护、加密与解密应用、扫描与抓包分析
    Security基础(一):Linux基本防护措施、使用sudo分配管理权限、提高SSH服务安全
    勤奋之致,功成之始
    Database基础(七):部署集群基础环境、MySQL-MMM架构部署、MySQL-MMM架构使用
    Database基础(六):实现MySQL读写分离、MySQL性能调优
    Database基础(五):使用binlog日志、XtraBackup备份工具、MySQL AB复制
    Database基础(四):密码恢复及设置、 用户授权及撤销、数据备份与恢复、MySQL管理工具
    Database基础(三):SQL数据导入/导出、 操作表记录、查询及匹配条件
    vue-打包上线
    vue报错-Object(...) is not a function
  • 原文地址:https://www.cnblogs.com/Kelvin2005/p/16337345.html
Copyright © 2020-2023  润新知