[洛谷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) { x = ; ; ; ) + (x << ) + (o & ); x *= f; } ll n, g[], f[], a[], b[], rev[]; ll w[][]; ll _pow(ll x, ll n) { ll ans = ; , x = x * x % P) ) ans = ans * x % P; return ans;} inline void NTT(ll *a, int n, int f) { ; i < n; ++ i) if( i < rev[i]) swap(a[i], a[rev[i]]); w[][] = w[][] = ; ; i < n; i++) { w[][i] = w[][i - ] * _pow(Ge, (P - ) / n) % P; w[][i] = _pow(w[][i], P - ); } ; i < n; i <<= ) , l = n / (i << ); j < n; j += (i << )) , t = ; k < i; k += , t += l) { ll x = a[j + k], y = w[f][t] * a[i + j + k] % P; a[j + k] = (x + y) % P, a[i + j + k] = (x - y + P) % P; } ; f && i < n; i++) a[i] = a[i] * _pow(n, P - ) % P; } inline void cdq(int l, int r) { if( l == r) return ; cdq(l, mid); , L = ; ) << ; Len <<= ) ++ L; fr(i, , Len) rev[i] = (rev[i >> ] >> )|((i&) << L-); fr(i, , Len) a[i] = b[i] = ; fr(i, l, mid) a[i-l] = f[i]; fr(i, , r-l) b[i] = g[i]; NTT(a, Len, ); NTT(b, Len, ); fr(i, , Len) a[i] = a[i] * b[i] % P; NTT(a, Len, ); fr(i, mid+, r) f[i] = (f[i] + a[i-l]) % mod; cdq(mid+, r); } int main() { G(n); fr(i, , n-) G(g[i]); f[] = ; cdq(, n-); fr(i, , n-) printf("%lld ", f[i]); }
[洛谷P4721]分治FFT的更多相关文章
- 洛谷 P4721 【模板】分治 FFT 解题报告
P4721 [模板]分治 FFT 题目背景 也可用多项式求逆解决. 题目描述 给定长度为 \(n−1\) 的数组 \(g[1],g[2],\dots,g[n-1]\),求 \(f[0],f[1],\d ...
- [洛谷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^ ...
- 洛谷P4721 【模板】分治 FFT(分治FFT)
传送门 多项式求逆的解法看这里 我们考虑用分治 假设现在已经求出了$[l,mid]$的答案,要计算他们对$[mid+1,r]$的答案的影响 那么对右边部分的点$f_x$的影响就是$f_x+=\sum_ ...
- 洛谷P4721 【模板】分治 FFT(生成函数+多项式求逆)
传送门 我是用多项式求逆做的因为分治FFT看不懂…… upd:分治FFT的看这里 话说这个万恶的生成函数到底是什么东西…… 我们令$F(x)=\sum_{i=0}^\infty f_ix^i,G(x) ...
- 洛谷 P4721 [模板]分治FFT —— 分治FFT / 多项式求逆
题目:https://www.luogu.org/problemnew/show/P4721 分治做法,考虑左边对右边的贡献即可: 注意最大用到的 a 的项也不过是 a[r-l] ,所以 NTT 可以 ...
- [洛谷P4721]【模板】分治 FFT_求逆
题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:分治$FFT$博客,发现 ...
- 2019.01.04 洛谷 P4721 【模板】分治 FFT
传送门 如同题目所描述的一样,这是一道板题. 题意简述:给你一个数组g1,2,...ng_{1,2,...n}g1,2,...n并定义f0=1,fi=∑j=1ifi−jgjf_0=1,f_i=\su ...
- [P4721] 分治 FFT
「题意」给定\(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\). 「分析」分治处理区间[ ...
- 洛谷P1228 分治
https://www.luogu.org/problemnew/show/P1228 我真傻,真的,我单知道这种题目可以用dfs剪枝过,没有想到还能构造分治,当我敲了一发dfs上去的时候,只看到一个 ...
随机推荐
- 03.WSDL分析
自己做一个程序放到tomcat里面这个就是服务,自己安装一个oracle,oracle启动之后那它本身就是一种服务. WebService就是HTTP,那么它和HTTP有什么不同呢? HTTP GET ...
- 图论算法》关于tarjan算法两三事
关于tarjan,在下觉得这个算法从本质上是一种暴力求强连通分量的方法,但事实上这也是最有效的求强连通分量的方法之一,它对于处理各种强连通分量中奇怪问题,都可以直接转化,所以比较通用和常见. 什么是t ...
- 【总结整理】OpenLayers项目分析,OpenLayers中的图层,GeoServer发布wms服务--实验(转)
https://blog.csdn.net/u013751758/article/details/44751315 https://blog.csdn.net/u013751758/article/d ...
- ubunt 14.04 Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly. Modul
CMake Error: Could not find CMAKE_ROOT !!! CMake has most likely not been installed correctly. Modul ...
- Java后端WebSocket的Tomcat实现(转载)
一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...
- 用conda创建一个tensorflow 虚拟环境
创建your——user——name = tensorflow 的虚拟环境 xinpingdeMacBook-Pro:~ xinpingbao$ conda create -n tensorflow ...
- 在Windows 8上安装SQL Server2012
SQL Server 2012 的安装方法跟2008差不多,基本上都是点击下一步,不过在安装的时候可能会进度条一直停留在“正在启动操作系统功能”NetFx3””处不动,出现这个问题的原因是在Windo ...
- Mr_matcher的细节1
1.NodeHandle类(或者NodeHandle句柄)的私有名称 1)句柄可以让你通过构造函数指定命名空间 ros::NodeHandle nh("my_namespace") ...
- Part6-点亮指路灯_lesson1
1. 2.GPIO 查阅芯片手册:GPIO 代码: 3.外设基地址初始化 打开arm核手册, 基地址为0x70000000,去搜芯片手册6410, 把这个基地址告诉处理器,通过协处理器的cp15, 转 ...
- 1.python系统性能信息模块之psutil模块
Psutil(进程和系统实用程序)是一个跨平台的库,用于在Python中检索有关运行进程和系统资源利用率(CPU,内存,磁盘,网络)的信息.它主要用于系统监视,分析和限制系统资源及运行进程的管理.它实 ...