Link

Solution

有两种解法。

法1:

 直接上分治FFT,也就是CDQ分治+FFT。

 具体做法是先递归左半边,算出左半边答案之后,将左半边贡献到右半边,然后递归右半边。

 分治是一个log的,每次暴力计算贡献是\(\text O(n^2)\)的,考虑用FFT优化计算贡献的过程。总复杂度变成\(\text O(n{log_n}^2)\)。

 需要注意:因为只算左半边对右半边的贡献,所以f数组右半边应置为0。

法2:

 设 \(F(x)=\sum\limits_{i=0}^{\infty}f[i]x^i\),\(G(x)=\sum\limits_{i=0}^{\infty}g[i]x^i\),并补充\(g[0]=0\),有
\[
\begin{align}
F(x)*G(x)&=\sum\limits_{i=0}^\infty \sum\limits_{j=0}^\infty f[i]g[j]\cdot x^{i+j}\\
&=\sum\limits_{k=0}^\infty \sum\limits_{i=0}^k f[i]g[k-i]\cdot x^k
&=\sum\limits_{k=0}^\infty \sum\limits_{i=0}^{k-1} f[i]g[k-i]\cdot x^k
\end{align}
\]
 当k=0是有\(\sum\limits_{i=0}^{k-1} f[i]g[k-i]\cdot x^k=0\)

 当k>0时有 \(\sum\limits_{i=0}^{k-1} f[i]g[k-i]\cdot x^k=f[k]\cdot x^k\)

 所以\(F(x)\)与\(F(x)*G(x)\)只差了一个常数项\(f[0]\)

即 \(F(x)=F(x)*G(x)+f[0]\) \(\Rightarrow\) \(F(x)=\frac{f[0]}{1-G(x)}=\frac{1}{1-G(x)}\)

 多项式求逆即可。

 这次重写发现自己NTT又有几个地方记不太清了:

  1.数组范围应该是2N向上取2的次幂,因为两个长度是N的多项式相乘有2N项

  2.for循环模拟递归过程,要注意是每一层操作相同且独立,所以不要把算单位根放在枚举每段起始位置p的那一层for了,应该放到最里层。

  3.根据实际情况(mod x的多少次方)判断长度。

  4.辅助数组用完记得清空。

【模板】分治 FFT的更多相关文章

  1. 洛谷.4721.[模板]分治FFT(NTT)

    题目链接 换一下形式:\[f_i=\sum_{j=0}^{i-1}f_jg_{i-j}\] 然后就是分治FFT模板了\[f_{i,i\in[mid+1,r]}=\sum_{j=l}^{mid}f_jg ...

  2. 解题:洛谷4721 [模板]分治FFT

    题面 这是CDQ入门题,不要被题目名骗了,这核心根本不在不在FFT上啊=.= 因为后面的项的计算依赖于前面的项,不能直接FFT.所以用CDQ的思想,算出前面然后考虑给后面的贡献 #include< ...

  3. 洛谷 P4721 [模板]分治FFT —— 分治FFT / 多项式求逆

    题目:https://www.luogu.org/problemnew/show/P4721 分治做法,考虑左边对右边的贡献即可: 注意最大用到的 a 的项也不过是 a[r-l] ,所以 NTT 可以 ...

  4. 洛谷 P4721 【模板】分治 FFT 解题报告

    P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 \(n−1\) 的数组 \(g[1],g[2],\dots,g[n-1]\),求 \(f[0],f[1],\d ...

  5. 【洛谷4721】【模板】分治FFT(CDQ分治_NTT)

    题目: 洛谷 4721 分析: 我觉得这个 "分治 FFT " 不能算一种特殊的 FFT ,只是 CDQ 分治里套了个用 FFT (或 NTT)计算的过程,二者是并列关系而不是偏正 ...

  6. luoguP4721 【模板】分治 FFT

    P4721 [模板]分治 FFT 链接 luogu 题目描述 给定长度为 \(n-1\) 的数组 \(g[1],g[2],..,g[n-1]\),求 \(f[0],f[1],..,f[n-1]\),其 ...

  7. LG4721 【模板】分治 FFT

    P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 $n-1$ 的数组 $g[1],g[2],..,g[n-1]$,求 $f[0],f[1],..,f[n-1]$ ...

  8. P4721【模板】分治 FFT

    瞎扯 虽然说是FFT但是还是写了一发NTT(笑) 然后忘了IDFT之后要除个n懵逼了好久 以及递归的时候忘了边界无限RE 思路 朴素算法 分治FFT 考虑到题目要求求这样的一个式子 \[ F_x=\S ...

  9. [洛谷P4721]【模板】分治 FFT

    题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:直接求复杂度是$O(n^ ...

  10. 洛谷 4721 【模板】分治 FFT——分治FFT / 多项式求逆

    题目:https://www.luogu.org/problemnew/show/P4721 分治FFT:https://www.cnblogs.com/bztMinamoto/p/9749557.h ...

随机推荐

  1. SpringBoot系列之Spring Data Jpa集成教程

    SpringBoot系列之Spring Data Jpa集成教程 Spring Data Jpa是属于Spring Data的一个子项目,Spring data项目是一款集成了很多数据操作的项目,其下 ...

  2. 一些demo

    绑定端口demo: #include <stdio.h> #include <sys/socket.h> #include <stdlib.h> #include ...

  3. vue-cli开发项目,调用html5+接口,hbuilder真机运行,打包

    开发中使用vue-cli正常开发 将配置文件中的路径改为相对路径--否则在打包之后真机运行时无法找到指定路径 开发完或者开发途中想要查看调用h5+的api效果就需要打包了 npm run build ...

  4. Jquery使用ajax与Flask后端进行数据交互

    最近做项目碰到一个坑,jquery使用ajax向flask传输数据的时候,在后端采用request.data无论如何都获取不到数据,代码如下: 前端: <script> function ...

  5. vivado三人表决仿真

    概述 下面以三人表决电路的verilog仿真来了解一下vivado软件的使用. 编写设计文件 首先可以在开始的界面通过create new project来新建工程,也可以通过file-->pr ...

  6. sendRedirect()和forward()方法有什么区别?

    forward是服务器内部的跳转,浏览器的地址栏不会发生变化,同时可以把request和response传递给后一个请求.sendRedirect()是浏览器方面的跳转,要发送两次请求,地址栏也会发生 ...

  7. 一款 Postman 的开源替代品: Postwoman

    1. 前言 大家都知道,Postman是一个非常受欢迎的API接口调试工具,提供有Chrome扩展插件版和独立的APP,不过它的很多高级功能都需要付费才能使用. 如果你连Postman都还没有用过,不 ...

  8. 《Java基础知识》Java类的定义及其实例化

    类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog { String name; int age; ...

  9. Cesium案例解析(二)——ImageryLayers影像图层

    目录 1. 概述 2. 实例 2.1. ImageryLayers.html 2.2. ImageryLayers.js 2.2.1. 代码 2.2.2. 解析 3. 结果 1. 概述 Cesium支 ...

  10. vue hover如何触发事件?

    vue中并没有 @hover 事件,但是可以使用 @mouseenter 和 @mouseleave 来模拟hover操作.