【模板】分治 FFT
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的更多相关文章
- 洛谷.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 ...
- 解题:洛谷4721 [模板]分治FFT
题面 这是CDQ入门题,不要被题目名骗了,这核心根本不在不在FFT上啊=.= 因为后面的项的计算依赖于前面的项,不能直接FFT.所以用CDQ的思想,算出前面然后考虑给后面的贡献 #include< ...
- 洛谷 P4721 [模板]分治FFT —— 分治FFT / 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4721 分治做法,考虑左边对右边的贡献即可: 注意最大用到的 a 的项也不过是 a[r-l] ,所以 NTT 可以 ...
- 洛谷 P4721 【模板】分治 FFT 解题报告
P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 \(n−1\) 的数组 \(g[1],g[2],\dots,g[n-1]\),求 \(f[0],f[1],\d ...
- 【洛谷4721】【模板】分治FFT(CDQ分治_NTT)
题目: 洛谷 4721 分析: 我觉得这个 "分治 FFT " 不能算一种特殊的 FFT ,只是 CDQ 分治里套了个用 FFT (或 NTT)计算的过程,二者是并列关系而不是偏正 ...
- luoguP4721 【模板】分治 FFT
P4721 [模板]分治 FFT 链接 luogu 题目描述 给定长度为 \(n-1\) 的数组 \(g[1],g[2],..,g[n-1]\),求 \(f[0],f[1],..,f[n-1]\),其 ...
- LG4721 【模板】分治 FFT
P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 $n-1$ 的数组 $g[1],g[2],..,g[n-1]$,求 $f[0],f[1],..,f[n-1]$ ...
- P4721【模板】分治 FFT
瞎扯 虽然说是FFT但是还是写了一发NTT(笑) 然后忘了IDFT之后要除个n懵逼了好久 以及递归的时候忘了边界无限RE 思路 朴素算法 分治FFT 考虑到题目要求求这样的一个式子 \[ F_x=\S ...
- [洛谷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^ ...
- 洛谷 4721 【模板】分治 FFT——分治FFT / 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4721 分治FFT:https://www.cnblogs.com/bztMinamoto/p/9749557.h ...
随机推荐
- 9月腾讯、百度、阿里高频的29道SSM框架面试题解析
一.Spring面试题 1.Spring 在ssm中起什么作用? Spring:轻量级框架 作用:Bean工厂,用来管理Bean的生命周期和框架集成. 两大核心:1.IOC/DI(控制反转/依赖注入) ...
- 还不知道如何实践微服务的Java程序员,这遍文章千万不要错过!
作者:古霜卡比 前言 本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节. 要理解微服务 ...
- oc实现小型学生管理系统
首先,创建一个工程,然后加入两个cocoaclass,分别命名为Student 和 StudentSystem. 然后就可以开始写代码喽 ...
- iis部署网站后出现未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\106f9ae8\cc0e1
在本地开发环境没问题,但是发布到服务器出现:未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Fil ...
- 《Java练习题》习题集一
编程合集: https://www.cnblogs.com/jssj/p/12002760.html Java总结:https://www.cnblogs.com/jssj/p/11146205.ht ...
- 《Java基础知识》Java static关键字以及Java静态变量和静态方法
static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...
- Python基础知识第八篇(集合)
#集合是无序的#集合是不同元素组成的#集合是不可变的,列如:列表,字典,元组#创建空集合 s=set() # s={1,2,3,4,2} # print(s) #集合添加>>>> ...
- C#线程学习笔记十:async & await入门三
一.Task.Yield Task.Yield简单来说就是创建时就已经完成的Task,或者说执行时间为0的Task,或者说是空任务,也就是在创建时就将Task的IsCompeted值设置为0. 我们知 ...
- 一起学Spring之Web基础篇
概述 在日常的开发中Web项目集成Spring框架,已经越来越重要,而Spring框架已经成为web开发的主流框架之一.本文主要讲解Java开发Web项目集成Spring框架的简单使用,以及使用Spr ...
- C# DataTable to List<T> based on reflection.
From https://www.cnblogs.com/zjbky/p/9242140.html static class ExtendClass { public static List<T ...