卷积:$C[i]=\sum \limits_{j=0}^{i}A[j]*B[i-j]$可以画图理解一下其实就是交叉相乘的和。

卷积可以看作两个多项式乘积的形式,只不过求出的结果的项数不同。

FFT讲解

复数讲解

 #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的更多相关文章

  1. 模板 FFT 快速傅里叶变换

    FFT模板,原理不难,优质讲解很多,但证明很难看太不懂 这模板题在bzoj竟然是土豪题,服了 #include <cmath> #include <cstdio> #inclu ...

  2. 洛谷P1919 A*B problem 快速傅里叶变换模板 [FFT]

    题目传送门 A*B problem 题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数 ...

  3. [模板]FFT

    郝神并没有令我明白这个. 但是巨神的题解太强了. #include <iostream> #include <complex> #include <cmath> # ...

  4. $FFT/NTT/FWT$题单&简要题解

    打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include < ...

  5. UOJ#34 FFT模板题

    写完上一道题才意识到自己没有在博客里丢过FFT的模板-- 这道题就是裸的多项式乘法,可以FFT,可以NTT,也可以用Karasuba(好像有人这么写没有T),也可以各种其他分治乘法乱搞-- 所以我就直 ...

  6. 多项式FFT相关模板

    自己码了一个模板...有点辛苦...常数十分大,小心使用 #include <iostream> #include <stdio.h> #include <math.h& ...

  7. 【bzoj2179】FFT快速傅立叶 FFT模板

    2016-06-01  09:34:54 很久很久很久以前写的了... 今天又比较了一下效率,貌似手写复数要快很多. 贴一下模板: #include<iostream> #include& ...

  8. FFT模板

    我终于下定决心学习FFT了. orzCHX,得出模板: #include<cstdio> #include<cctype> #include<queue> #inc ...

  9. 再写FFT模板

    没什么好说的,今天又考了FFT(虽然不用FFT也能过)但是确实有忘了怎么写FFT了,于是乎只有重新写一遍FFT模板练一下手了.第一部分普通FFT,第二部分数论FFT,记一下模数2^23*7*17+1 ...

随机推荐

  1. CSS3的transform 转换

    transform是可以实现元素位移,旋转,缩放和变形.只介绍了2D转换~ translate 位移:改变元素位置 最多设置两个值,一个水平,一个垂直.如果设置为负数,则代表反方向.可设置百分比.eg ...

  2. PHP实现微信申请退款流程实例源码

    https://www.jb51.net/article/136476.htm 目录 前期准备: 前面讲了怎么实现微信支付,详见博文:PHP实现微信支付(jsapi支付)流程  和ThinkPHP中实 ...

  3. 中断描述符表 IDT

    保护模式下三个重要的系统表——GDT.LDT和IDT 这里主要是解释中断描述符表 中断描述符表IDT将每个异常或中断向量分别与它们的处理过程联系起来.与GDT和LDT表类似,IDT也是由8字节长描述符 ...

  4. Java review-basic1

    1. Dependency Injection Answer: Any application is composed of many objects that collaborate with ea ...

  5. OpenLayers使用symbolizers样式特征

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  6. Cesium 1.50重量级新功能测评

    概要 既Cesium 1.49中3dtile加载性能大幅提升以后,Cesium 1.50再次迎来几个重量级新功能: 1 地球裁切,这下相当于可以截取一部分地形影像数据,当作一个平面场景来用了! 2 射 ...

  7. BZOJ4719[NOIP2016提高组Day1T2] 天天爱跑步

    #261. [NOIP2016]天天爱跑步 描述 提交 自定义测试 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家 ...

  8. 洛谷P2835 刻录光盘 [2017年6月计划 强连通分量02]

    P2835 刻录光盘 题目描述 在JSOI2005夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习.组委会觉得这个主意不错!可是组委会一时没有足 ...

  9. 那些年,我们见过的Java服务端乱象

    导读 查尔斯·狄更斯在<双城记>中写道:“这是一个最好的时代,也是一个最坏的时代.”移动互联网的快速发展,出现了许多新机遇,很多创业者伺机而动:随着行业竞争加剧,互联网红利逐渐消失,很多创 ...

  10. Quick BI取数模型深度剖析

    开发图表最关键的点在于选择准确的图表类型展示准确的数据,而准确的数据往往依赖于一个强大的取数模型,因此设计一个好的取数模型不仅可以解决数据安全的问题,更可以帮助每个访问者高效触达自己想要的数据,开发者 ...