[洛谷P4721]分治FFT】的更多相关文章

NTT入门,放个板子 // luogu-judger-enable-o2 #include <bits/stdc++.h> using namespace std; #define fr(i, a, b) for ( int i = a; i <= b; ++ i) #define mid ( l + r >> 1) typedef long long ll; , mod = , Ge = ; template <class T> void G(T &x)…
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,…
题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:直接求复杂度是$O(n^2)$,明显不可以通过此题 分治$FFT$,可以用$CDQ$分治,先求出$f_{[l,mid)}$,可以发现这部分对区间的$f_{[mid,r)}$的贡献是$f_{[l,mid)}*g_{[0,r-l)}$,卷出来加到对应位置就行了,复杂度$O(n\log_2^2n)​$ 卡点:无 C++ Code…
传送门 多项式求逆的解法看这里 我们考虑用分治 假设现在已经求出了$[l,mid]$的答案,要计算他们对$[mid+1,r]$的答案的影响 那么对右边部分的点$f_x$的影响就是$f_x+=\sum_{i=l}^{mid}f[i]g[x-i]$ 发现右边那个东西可以用卷积快速计算 那么只要一边分治一边跑FFT统计贡献就行了 说是分治FFT实际上代码里写的是NTT…… 而且分治FFT跑得好慢多项式求逆的速度是它的10倍啊…… //minamoto #include<iostream> #incl…
传送门 我是用多项式求逆做的因为分治FFT看不懂…… upd:分治FFT的看这里 话说这个万恶的生成函数到底是什么东西…… 我们令$F(x)=\sum_{i=0}^\infty f_ix^i,G(x)=\sum_{i=0}^\infty g_ix^i$,且$g_0=0$ 这俩玩意儿似乎就是$f(x)$和$g(x)$的生成函数 那么就有$$F(x)G(x)=\sum_{i=0}^\infty x^i\sum_{j+k=i}f_jg_k$$ 然后根据题目,有$$f_i=\sum_{j=1}^if_{…
题目:https://www.luogu.org/problemnew/show/P4721 分治做法,考虑左边对右边的贡献即可: 注意最大用到的 a 的项也不过是 a[r-l] ,所以 NTT 可以只做到 2*(r-l),能快一倍. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long…
题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:分治$FFT$博客,发现这道题就是求$f*g=f-1$($f-1$就是没有常数项的$f$),改写一下式子:$$f*g\equiv f-1\pmod{x^n}\\f-f*g\equiv1\pmod{x^n}\\f*(1-g)\equiv1\pmod{x^n}\\f\equiv(1-g)^{-1}\pmod{x^n}$$ 卡点…
传送门 如同题目所描述的一样,这是一道板题. 题意简述:给你一个数组g1,2,...ng_{1,2,...n}g1,2,...n​并定义f0=1,fi=∑j=1ifi−jgjf_0=1,f_i=\sum_{j=1}^if_{i-j}g_jf0​=1,fi​=∑j=1i​fi−j​gj​,让你求f0,1,...,nf_{0,1,...,n}f0,1,...,n​ 解析 代码 : #include<bits/stdc++.h> #define ri register int #define add…
「题意」给定\(g[0]=1\),\(g[1~n-1]\)求序列\(f[i]=\sum_{j=1}^i f[i-j]*g[j]\ , i\in[1,n-1],f[0]=1\). 「分析」分治处理区间[l,r],先递归求出[l,mid],在统计[l,mid]对[mid+1,r]的贡献,可以发现 \[f[x]+=\sum_{i=l}^{mid}f[i]*g[x-i]\ , x\in[mid+1,r]\] 拿卷积算,令\(A[0,mid-l]\)=\(f[l,mid]\), \(B[l,r-l]\)=…
https://www.luogu.org/problemnew/show/P1228 我真傻,真的,我单知道这种题目可以用dfs剪枝过,没有想到还能构造分治,当我敲了一发dfs上去的时候,只看到一个42分的返回┭┮﹏┭┮ 题意:构造用所给的四个图案拼凑一个缺制定位置的正方形,正方形的长度为2 ^ k (0 < k < 10) 一开始直接选择了dfs暴力填充,TLE却想不到有效的剪枝方法,一看题解这竟然是一道构造分治,原因除了愚蠢之外还有忽略了题目中正方形边长为2 ^ k这个条件 我们定义多出…