模板—FFT
卷积:$C[i]=\sum \limits_{j=0}^{i}A[j]*B[i-j]$可以画图理解一下其实就是交叉相乘的和。
卷积可以看作两个多项式乘积的形式,只不过求出的结果的项数不同。
#include<iostream>
#include<cstring>
#include<complex>
#include<cstdio>
#define cp complex<double>
using namespace std;
const double pi=3.14159265358979; void FFT(cp *a,int n,int inv)
{
if(n==)return;
int mid=n/;static cp b[];
for(int i=;i<=mid-;i++)b[i]=a[i*],b[i+mid]=a[i*+];
for(int i=;i<=n-;i++)a[i]=b[i];
FFT(a,mid,inv);FFT(a+mid,mid,inv);
for(int i=;i<=mid-;i++)
{
cp x(cos(*pi*i/n),inv*sin(*pi*i/n));
b[i]=a[i]+x*a[i+mid],b[i+mid]=a[i]-x*a[i+mid];
}
for(int i=;i<=n-;i++)a[i]=b[i];
}
int n,m;
cp a[],b[];int c[];
signed main()
{
// freopen("1.in","r",stdin);
// freopen("out.out","w",stdout); cin>>n>>m;double tem;
for(int i=;i<=n;i++)scanf("%lf",&tem),a[i]=cp(tem,);
for(int i=;i<=m;i++)scanf("%lf",&tem),b[i]=cp(tem,);
int len=n+m+,now=;
for(;;now*=)if(now>=len){len=now;break;}
FFT(a,len,);FFT(b,len,);
for(int i=;i<len;i++)a[i]*=b[i];
FFT(a,len,-);
for(int i=;i<=n+m;i++)cout<<(int)(a[i].real()/len+0.5)<<" ";
}
FFT递归版
#include<iostream>
#include<cstring>
#include<complex>
#include<cstdio>
#define cp complex<double>
using namespace std;
const double pi=3.14159265358979; int rev[];
void FFT(cp *a,int n,int inv)
{
int bit=;while((<<bit)<n)bit++;
for(int i=;i<n;i++)rev[i]=(rev[i>>]>>)|((i&)<<(bit-));
for(int i=;i<n;i++)if(i<rev[i])swap(a[i],a[rev[i]]);
for(int mid=;mid<n;mid*=)
{
cp temp(cos(pi/mid),inv*sin(pi/mid));
for(int i=;i<n;i+=mid*)
{
cp ome(,);
for(int j=;j<mid;j++,ome*=temp)
{
cp x=a[i+j],y=ome*a[i+j+mid];
a[i+j]=x+y,a[i+j+mid]=x-y;
}
}
}
}
int n,m;
cp a[],b[];int c[];
signed main()
{
// freopen("1.in","r",stdin);
// freopen("out.out","w",stdout); cin>>n>>m;double tem;
for(int i=;i<=n;i++)scanf("%lf",&tem),a[i]=cp(tem,);
for(int i=;i<=m;i++)scanf("%lf",&tem),b[i]=cp(tem,);
int len=n+m+,now=;
for(;;now*=)if(now>=len){len=now;break;}
FFT(a,len,);FFT(b,len,);
for(int i=;i<len;i++)a[i]*=b[i];
FFT(a,len,-);
for(int i=;i<=n+m;i++)cout<<(int)(a[i].real()/len+0.5)<<" ";
}
FFT迭代版
模板—FFT的更多相关文章
- 模板 FFT 快速傅里叶变换
FFT模板,原理不难,优质讲解很多,但证明很难看太不懂 这模板题在bzoj竟然是土豪题,服了 #include <cmath> #include <cstdio> #inclu ...
- 洛谷P1919 A*B problem 快速傅里叶变换模板 [FFT]
题目传送门 A*B problem 题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数 ...
- [模板]FFT
郝神并没有令我明白这个. 但是巨神的题解太强了. #include <iostream> #include <complex> #include <cmath> # ...
- $FFT/NTT/FWT$题单&简要题解
打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include < ...
- UOJ#34 FFT模板题
写完上一道题才意识到自己没有在博客里丢过FFT的模板-- 这道题就是裸的多项式乘法,可以FFT,可以NTT,也可以用Karasuba(好像有人这么写没有T),也可以各种其他分治乘法乱搞-- 所以我就直 ...
- 多项式FFT相关模板
自己码了一个模板...有点辛苦...常数十分大,小心使用 #include <iostream> #include <stdio.h> #include <math.h& ...
- 【bzoj2179】FFT快速傅立叶 FFT模板
2016-06-01 09:34:54 很久很久很久以前写的了... 今天又比较了一下效率,貌似手写复数要快很多. 贴一下模板: #include<iostream> #include& ...
- FFT模板
我终于下定决心学习FFT了. orzCHX,得出模板: #include<cstdio> #include<cctype> #include<queue> #inc ...
- 再写FFT模板
没什么好说的,今天又考了FFT(虽然不用FFT也能过)但是确实有忘了怎么写FFT了,于是乎只有重新写一遍FFT模板练一下手了.第一部分普通FFT,第二部分数论FFT,记一下模数2^23*7*17+1 ...
随机推荐
- CSS3的transform 转换
transform是可以实现元素位移,旋转,缩放和变形.只介绍了2D转换~ translate 位移:改变元素位置 最多设置两个值,一个水平,一个垂直.如果设置为负数,则代表反方向.可设置百分比.eg ...
- PHP实现微信申请退款流程实例源码
https://www.jb51.net/article/136476.htm 目录 前期准备: 前面讲了怎么实现微信支付,详见博文:PHP实现微信支付(jsapi支付)流程 和ThinkPHP中实 ...
- 中断描述符表 IDT
保护模式下三个重要的系统表——GDT.LDT和IDT 这里主要是解释中断描述符表 中断描述符表IDT将每个异常或中断向量分别与它们的处理过程联系起来.与GDT和LDT表类似,IDT也是由8字节长描述符 ...
- Java review-basic1
1. Dependency Injection Answer: Any application is composed of many objects that collaborate with ea ...
- OpenLayers使用symbolizers样式特征
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...
- Cesium 1.50重量级新功能测评
概要 既Cesium 1.49中3dtile加载性能大幅提升以后,Cesium 1.50再次迎来几个重量级新功能: 1 地球裁切,这下相当于可以截取一部分地形影像数据,当作一个平面场景来用了! 2 射 ...
- BZOJ4719[NOIP2016提高组Day1T2] 天天爱跑步
#261. [NOIP2016]天天爱跑步 描述 提交 自定义测试 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家 ...
- 洛谷P2835 刻录光盘 [2017年6月计划 强连通分量02]
P2835 刻录光盘 题目描述 在JSOI2005夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习.组委会觉得这个主意不错!可是组委会一时没有足 ...
- 那些年,我们见过的Java服务端乱象
导读 查尔斯·狄更斯在<双城记>中写道:“这是一个最好的时代,也是一个最坏的时代.”移动互联网的快速发展,出现了许多新机遇,很多创业者伺机而动:随着行业竞争加剧,互联网红利逐渐消失,很多创 ...
- Quick BI取数模型深度剖析
开发图表最关键的点在于选择准确的图表类型展示准确的数据,而准确的数据往往依赖于一个强大的取数模型,因此设计一个好的取数模型不仅可以解决数据安全的问题,更可以帮助每个访问者高效触达自己想要的数据,开发者 ...