模板—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 ...
随机推荐
- 2019-7-3-WPF-使用-Composition-API-做高性能渲染
title author date CreateTime categories WPF 使用 Composition API 做高性能渲染 lindexi 2019-07-03 10:30:57 +0 ...
- 洛谷P1978 集合 [2017年6月计划 数论08]
P1978 集合 题目描述 集合是数学中的一个概念,用通俗的话来讲就是:一大堆数在一起就构成了集合.集合有如 下的特性: •无序性:任一个集合中,每个元素的地位都是相同的,元素之间是无序的. •互异性 ...
- 【每日一linux命令7】用户及用户组
一.查询用户及用户组相关命令 1.whoami 查询当前登录的用户名 2.groups 查询当前登录用户名所在的用户组 3.groups root 查询root用户名所在的用户组 二.怎么批量查看用户 ...
- PHP--y2k38的解决方法已经时间格式的常用转换
y2k38又名千年虫问题,又称Uinx Millennium Bug,此漏洞将会影响到所有32位系统下用Unix时间戳整数来记录时间的PHP,及其它编程语言. 一个整型的变量所能保存的最大时间为203 ...
- VMware workstation12安装苹果虚拟机
一.前言--准备工作 在win10上安装Mac虚拟机,既是费劲又是费内存的活儿 1.安装Vmware 2.下载MacOS的镜像:自行百度下载 3. unlocker的下载地址:http://downl ...
- MySQL ODBC驱动安装和配置数据源
一.MySQL的ODBC驱动下载及安装 步骤一:下载ODBC驱动安装包 1.下载地址: https://dev.mysql.com/downloads/connector/odbc/ 2.选择适合自己 ...
- 如何正确的在Android中存储特定应用文件
原文地址:How to Correctly Store App-Specific Files in Android Christophe Versieux (Waza_be)发表了一篇rant abo ...
- No.5 Verilog 建模方式
5-1 门级建模 VerilogHDL内建基元门: 多输入门:and, nand, or, nor, xor, xnor; 多输出门:buf, not 三态门:bufif0, bufif1, noti ...
- Vue源码探究-虚拟DOM的渲染
Vue源码探究-虚拟DOM的渲染 在虚拟节点的实现一篇中,除了知道了 VNode 类的实现之外,还简要地整理了一下DOM渲染的路径.在这一篇中,主要来分析一下两条路径的具体实现代码. 按照创建 Vue ...
- R语言与显著性检验学习笔记
R语言与显著性检验学习笔记 一.何为显著性检验 显著性检验的思想十分的简单,就是认为小概率事件不可能发生.虽然概率论中我们一直强调小概率事件必然发生,但显著性检验还是相信了小概率事件在我做的这一次检验 ...