卷积:$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. PHP--时间格式处理

    Ymd格式转Y-m-d或转成时间戳将Ymd格式如19930811转成1993-08-11格式 date('Y-m-d',strtotime('19930811') 将Ymd格式如19930811转成时 ...

  2. zoj 1001 python起步

    /*赶角还是挺好的....*/ import sys for line in sys.stdin: a=line.split() print int(a[0])+int(a[1])

  3. NOIP2017到都不签签记

    day 0: 校内开运动会,但是还是在机房学习了一天. 感觉上并没有多大用处,主要只是活跃一下思维而已. 然后就晚上上车出发去酒店. 下了个游戏王. 晚上叫了波宅急送,然后硬是腐了一个晚上. day ...

  4. 使用neo4j-import导入数据及关系

    背景 上节我们了解了什么是图数据库,作为研究对象的neo4j的特点,优缺点以及基本的环境搭建. 现在我们要讲存储在csv中的通话记录数据导入到neo4j中去,并且可以通过cql去查询导入的数据及关系 ...

  5. python实例 列表

    #! /usr/bin/python # -*- coding: utf8 -*- #列表类似Javascript的数组,方便易用 #定义元组 word=['a','b','c','d','e','f ...

  6. vue里调用moment.js

    1.首先安装moment npm install moment --save 2.在main.js里引入 import moment from 'moment'//导入文件      Vue.prot ...

  7. 使用log4j打印日志

    在项目中我们必不可少需要打印日志,通过日志我们可以查看系统的运行状态是否正常,当程序出现异常的时候,我们也可以通过查看日志来定位问题的位置,给程序员的工作带来了极大的便利. 以下这边博客的内容是我从一 ...

  8. 26718汉字,gbk是23940个汉字,gb18030有76556个汉字

    1 a 厑 吖 呵 啊 嗄 嬶 腌 錒 锕 阿 仰 卬 岇 昂 昻 枊 盎 肮 腌 軮 醠 雵 骯 侒 俺 儑 匎 匼 厂 厈 唵 啽 垵 埯 堓 媕 安 屵 岸 峎 峖 广 庵 按 揞 晻 暗 案 ...

  9. git update-index --assume-unchanged忽略跟踪

    Git 忽略已跟踪文件的改动 git update-index --assume-unchanged Git之本地忽略 这个分两种情况: 本地永久忽略,效果的gitignore一样,只不过不适于写到g ...

  10. SQLSERVER 时间函数汇总

    1.求当天的年份 (getdate(): 2012/05/08 18:07:26) SELECT YEAR(GETDATE())     --2012 2. 求当天的月份       SELECT M ...