卷积:$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. H5C3--边框图片

    类似于android的.9图片,目的是为了防止图片因为内容的扩展而导致图片拉伸失真. <!DOCTYPE html> <html lang="en"> &l ...

  2. hdu 1166 敌兵布阵(线段树区间求和)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. SSM三大框架整合教程

    前言 SSM就是Spring+SpringMvc+Mybatis,本文搭建一个基本的ssm框架 本文所有源代码包含jar包下载点击:https://download.csdn.net/download ...

  4. Tomcat中startup.bat启动无效

    error: Linux下启动和关闭tomcat报错,如下图所示: 而在windows下用cmd启动startup.bat也会报如上的错误: Neither the JAVA_HOME nor the ...

  5. 安装 TortoiseSVN 时提示 please install the universal crt first

    win7x64 解决办法 去https://www.microsoft.com/zh-cn/搜索 universal crt (hotfix kb2999226)点击下图链接 也就是https://s ...

  6. 个人站长建议直接封掉的IP地址列表

    <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="164.100.196.21 ...

  7. Vue. 之 Element table 单元格内容隐藏

    Vue. 之 Element table 单元格内容隐藏 在table显示数据时,若某个单元格的内容过多,需要进行隐层,在这一列的单元格属性添加::show-overflow-tooltip=&quo ...

  8. DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS

    原文:DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0 ...

  9. 学习JDK1.8集合源码之--TreeSet

    1. TreeSet简介 TreeSet是Set的实现类之一,是不可重复集合,非线程安全的. TreeSet是SortedSet的唯一实现类,实现了元素的自动排序,排序不是以插入的顺序排序,而是默认以 ...

  10. Vue调试神器之Vue.js devTools

    Vue项目中使用Vue.js devTools这款调试神器,可以极大程度的提高我们的开发效率. 安装 1.打开Chrome网上应用商店安装插件(自墙),直接搜索devTools安装即可.贵宾传送阵,请 ...