模板 FFT 快速傅里叶变换
FFT模板,原理不难,优质讲解很多,但证明很难看太不懂
这模板题在bzoj竟然是土豪题,服了
- #include <cmath>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #define dd double
- #define ll long long
- #define N (1<<21)+10
- using namespace std;
- int n,m,ma;
- int r[N];
- dd const pi=acos(-);
- struct cp{
- dd x,y;
- cp(dd a,dd b):x(a),y(b){}
- cp(){}
- cp operator+(const cp &a){return cp(x+a.x,y+a.y);}
- cp operator-(const cp &a){return cp(x-a.x,y-a.y);}
- cp operator*(const cp &a){return cp(x*a.x-y*a.y,x*a.y+y*a.x);}
- }a[N],b[N],c[N];
- void FFT(cp s[],int len,int type)
- {
- for(int i=;i<len;i++)
- if(i<r[i]) swap(s[i],s[r[i]]);
- for(int k=;k<=len;k<<=)
- {
- cp wn(cos(*pi*type/k),sin(*pi*type/k));
- for(int i=;i<len;i+=k)
- {
- cp t,w(,);
- for(int j=;j<(k>>);j++,w=w*wn)
- {
- t=w*s[i+j+(k>>)];
- s[i+j+(k>>)]=s[i+j]-t;
- s[i+j]=s[i+j]+t;
- }
- }
- }
- }
- void FFT_main(cp A[],cp B[],cp C[],int len)
- {
- FFT(A,len,);FFT(B,len,);
- for(int i=;i<len;i++) C[i]=A[i]*B[i];
- FFT(C,len,-);
- }
- int gc()
- {
- int rett=,fh=;char c=getchar();
- while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
- while(c>=''&&c<=''){rett=(rett<<)+(rett<<)+c-'';c=getchar();}
- return rett*fh;
- }
- int main()
- {
- n=gc(),m=gc(),ma=,n++,m++;
- for(int i=;i<n;i++) a[i].x=1.0*gc();
- for(int i=;i<m;i++) b[i].x=1.0*gc();
- while((<<ma)<n+m){ma++;}
- for(int i=;i<(<<ma);i++)
- r[i]=(r[i>>]>>)|((i&)<<(ma-));
- FFT_main(a,b,c,<<ma);
- for(int i=;i<n+m-;i++) printf("%d ",(int)(c[i].x/(<<ma)+0.1));
- return ;
- }
模板 FFT 快速傅里叶变换的更多相关文章
- 「学习笔记」FFT 快速傅里叶变换
目录 「学习笔记」FFT 快速傅里叶变换 啥是 FFT 呀?它可以干什么? 必备芝士 点值表示 复数 傅立叶正变换 傅里叶逆变换 FFT 的代码实现 还会有的 NTT 和三模数 NTT... 「学习笔 ...
- FFT 快速傅里叶变换 学习笔记
FFT 快速傅里叶变换 前言 lmc,ikka,attack等众多大佬都没教会的我终于要自己填坑了. 又是机房里最后一个学fft的人 早背过圆周率50位填坑了 用处 多项式乘法 卷积 \(g(x)=a ...
- CQOI2018 九连环 打表找规律 fft快速傅里叶变换
题面: CQOI2018九连环 分析: 个人认为这道题没有什么价值,纯粹是为了考算法而考算法. 对于小数据我们可以直接爆搜打表,打表出来我们可以观察规律. f[1~10]: 1 2 5 10 21 4 ...
- 模板 - 数学 - 快速傅里叶变换/快速数论变换(FFT/NTT)
先看看. 通常模数常见的有998244353,1004535809,469762049,这几个的原根都是3.所求的项数还不能超过2的23次方(因为998244353的分解). 感觉没啥用. #incl ...
- FFT —— 快速傅里叶变换
问题: 已知A[], B[], 求C[],使: 定义C是A,B的卷积,例如多项式乘法等. 朴素做法是按照定义枚举i和j,但这样时间复杂度是O(n2). 能不能使时间复杂度降下来呢? 点值表示法: 我们 ...
- [C++] 频谱图中 FFT快速傅里叶变换C++实现
在项目中,需要画波形频谱图,因此进行查找,不是很懂相关知识,下列代码主要是针对这篇文章. http://blog.csdn.net/xcgspring/article/details/4749075 ...
- matlab中fft快速傅里叶变换
视频来源:https://www.bilibili.com/video/av51932171?t=628. 博文来源:https://ww2.mathworks.cn/help/matlab/ref/ ...
- 模板:快速傅里叶变换(FFT)
参考:http://blog.csdn.net/f_zyj/article/details/76037583 如果公式炸了请去我的csdn博客:http://blog.csdn.net/luyouqi ...
- FFT(快速傅里叶变换) 模板
洛谷 P3803 [模板]多项式乘法(FFT)传送门 存个板子,完全弄懂之后找机会再写个详解. #include<cstdio> #include<cmath> struct ...
随机推荐
- 训练1-U
输入2个正整数A,B,求A与B的最小公倍数. Input 2个数A,B,中间用空格隔开.(1<= A,B <= 10^9) Output 输出A与B的最小公倍数. Sample Input ...
- 4.1、Ansible模块
ansible-doc -l 列出所有模块 ansible-doc 模块名 查看模块的help说明 ansible-doc -s module_name:获取指定模块的使用信息 ***文 ...
- 01.Python基础-5.函数
1 函数的介绍 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 内置函数 自定义函数 2 函数的定义和调用 2.1 函数的定义和调用 定义 def 函数名([参数]): 代码块 [ ...
- ThinkPHP3.1.3分表状态时候的自动验证的代码BUG
问题描述 ThinkPHP3.1.3 当使用TP的分库分表后 有些地方需要使用Model自动验证create,当验证唯一性unique会出现BUG, 具体描述 因为自动验证检测唯一性会使用隐式的使用f ...
- C# List源码分析(二)
常用操作的复杂度分析 Contains 该方法是一个O(n)的方法,是根据顺序依次遍历整个列表的,观看源码,跟JAVA还是有不少分别的,在上一篇中就有发现,因为C#对Primitive类型是有处理的, ...
- [置顶]
QQ空间技术架构之深刻揭密
QQ空间作为腾讯海量互联网服务产品,经过近七年的发展,实现了从十万级到亿级同时在线的飞跃.在这个过程中,QQ空间团队遇到了哪些技术挑战?其站点前后台架构随着业务规模的变化又进行了怎样的演进与变迁?成长 ...
- JavaScript之Ajax技术
- HTTP中的重定向和请求转发的区别(转)
时间长有些忘了,转篇文章加深一下印象: 一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下:request.getRequestDispatcher("new.jsp&qu ...
- [using_microsoft_infopath_2010]Chapter12 管理监视InfoPath表单服务
本章概要: 1.在SharePoint中心控制台管理InfoPath设置 2.分析监视浏览器表单开考虑潜在性能问题 3.最小化回发数据
- Advanced Fruits HDU杭电1503【LCS的保存】
Problem Description The company "21st Century Fruits" has specialized in creating new sort ...