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

题目要我们求$f[i]=\sum\limits_{j=1}^{i}f[i-j]g[j]\;mod\;998244353$ 直接上$NTT$肯定是不行的,我们不能利用尚未求得的项卷积 所以要用$CDQ$分治,先递归$[l,mid]$,然后处理$[l,mid]$对$[mid+1,r]$的影响,再递归$[mid+1,r]$ 当我们处理$[l,mid]$对$[mid+1,r]$的影响时,$f[i](i\in [l,mid])$的是已经求完的,所以能用$NTT$卷积 细节比较多,注意不要让$f[i](i\…
题目链接 换一下形式:\[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_{i-j}+\sum_{j=mid+1}^rf_jg_{i-j}\] 复杂度\(O(n\log^2n)\). 分治思路见:https://www.cnblogs.com/SovietPower/p/9366763.html 多项式求逆做法先坑着. //693ms 4.91MB #include <…
@(学习笔记)[FFT, NTT] Problem Description Calculate A * B. Input Each line will contain two integers A and B. Process to end of file. Note: the length of each integer will not exceed 50000. Output For each case, output A * B in one line. Sample Input 1 2…
自己整理出来的模板 存在的问题: 1.多项式求逆常数过大(尤其是浮点数FFT) 2.log只支持f[0]=1的情况,exp只支持f[0]=0的情况 有待进一步修改和完善 FFT: #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; ); ,M=1e6+,mod=; int n,m,n2,a[N]; int Pow(int x,int p) { ; ,x=(ll)x*x%mod…
NTT: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 2000050 #define ll long long #define MOD 998244353 template<typename T> inline void read(T&x) { T f=,c=;char ch=getchar(); ;ch=getchar()…
粘板子: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int MOD = 998244353; const int N = 100050; const int M = N*3; template<typename T> inline void read(T&x) { T f = 1,c =…
给定 $g[1....n-1]$,求 $f[0],f[1],...,f[n-1]$,其中   $f[i]=\sum_{j=1}^{i}f[i-j]g[j]$    变界为 $f[0]=1$ 答案模 998244353   分治 $FFT$:类似 $CDQ$ 分治,先处理左边,再处理左对右的贡献   假设当前的区间为 $[l,r]$,已经处理完 $[l,mid]$ 的所有 $f$ 值,考虑左面对右面的贡献   右面所有 $f$ 的下标为 $[mid+1,r]$   那么 $f[l,mid]*g[1…
P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 \(n−1\) 的数组 \(g[1],g[2],\dots,g[n-1]\),求 \(f[0],f[1],\dots,f[n-1]\),其中\(f[i]=\sum_{j=1}^if[i-j]g[j]\) 边界为 \(f[0]=1\) .答案模 \(998244353\) . 输入输出格式 输入格式: 第一行一个正整数 \(n\) . 第二行共 \(n−1\) 个非负整数 \(g[1],g[2],\dots,…
题目: 洛谷 4721 分析: 我觉得这个 "分治 FFT " 不能算一种特殊的 FFT ,只是 CDQ 分治里套了个用 FFT (或 NTT)计算的过程,二者是并列关系而不是偏正关系,跟 CDQ 分治套树状数组之类性质差不多吧(所以我也不知道为什么洛谷要把这个作为一个模板). 言归正传,先看一眼原来的式子: \[f[i]=\begin{cases}1\ (i=0)\\\sum_{j=1}^{i}f[i-j]g[j]\ \mathrm{otherwise}\end{cases}\] \…
P4721 [模板]分治 FFT 链接 luogu 题目描述 给定长度为 \(n-1\) 的数组 \(g[1],g[2],..,g[n-1]\),求 \(f[0],f[1],..,f[n-1]\),其中 \[f[i]=\sum_{j=1}^if[i-j]g[j]\] 边界为 \(f[0]=1\) .答案模 \(998244353\) . 思路 分治+ntt.跑900+ms 其实limit只要设到区间长度就可以了,其他的是用不到的.对前半部分也没得影响. 代码 #include <bits/std…