FFT(快速傅里叶变换) 模板
存个板子,完全弄懂之后找机会再写个详解。
#include<cstdio>
#include<cmath> struct cpx
{
double rl,im;
friend cpx operator + (cpx q,cpx w)
{
return (cpx){q.rl+w.rl,q.im+w.im};
}
friend cpx operator - (cpx q,cpx w)
{
return (cpx){q.rl-w.rl,q.im-w.im};
}
friend cpx operator * (cpx q,cpx w)
{
return (cpx){q.rl*w.rl-q.im*w.im,q.rl*w.im+q.im*w.rl};
}
friend cpx operator ~ (cpx q)
{
return (cpx){q.rl,-q.im};
}
}urt[][],af[],bf[]; void swap(cpx &q,cpx &w)
{
cpx t=q;q=w;w=t;
} int n=,cnt,na,nb;
int r[];
const double pi=acos(-); void prefft()
{
for(int i=;i<n;i++)
{
urt[i][]=(cpx){cos(*pi*i/n),sin(*pi*i/n)};
urt[i][]=~urt[i][];
r[i]=(r[i>>]>>)|((i&)<<(cnt-));
}
} void fft(cpx *a,int inv)
{
for(int i=;i<n;i++)if(i<r[i])swap(a[i],a[r[i]]);
for(int l=;l<=n;l<<=)
{
int m=l>>;
for(cpx *p=a;p!=a+n;p+=l)
{
for(int i=;i<m;i++)
{
cpx t=urt[n/l*i][inv]*p[i+m];
p[i+m]=p[i]-t;
p[i]=p[i]+t;
}
}
}
if(inv)for(int i=;i<n;i++)a[i].rl/=n;
} int main()
{
scanf("%d%d",&na,&nb);
while(n<=na+nb)n<<=,cnt++;
for(int i=;i<=na;i++)scanf("%lf",&af[i].rl);
for(int i=;i<=nb;i++)scanf("%lf",&bf[i].rl);
prefft();
fft(af,);
fft(bf,);
for(int i=;i<n;i++)af[i]=af[i]*bf[i];
fft(af,);
for(int i=;i<=na+nb;i++)printf("%d ",(int)(af[i].rl+0.5));
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 —— 快速傅里叶变换
问题: 已知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 快速傅里叶变换
FFT模板,原理不难,优质讲解很多,但证明很难看太不懂 这模板题在bzoj竟然是土豪题,服了 #include <cmath> #include <cstdio> #inclu ...
- 洛谷P1919 A*B problem 快速傅里叶变换模板 [FFT]
题目传送门 A*B problem 题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数 ...
- [ C++ 快速高精度模板 ] [ BigN类 ] 大整数类 高精度 模板 BigInt FFT 快速傅里叶变换
[原创 转载请注明]瞎写的,如果代码有错,或者各位大佬有什么意见建议,望不吝赐教 更新日志: 对于规模较小的整数乘法使用$$O(n^2)$$方法,提高速度 modify()和operator[]的bu ...
随机推荐
- UML-GRASP后4种模式
1.多态 1).什么是多态 问题:if-else耦合度过高 解决: 方法1:接口 方法2:超类里需多态的方法前加上{abstract} 2).相关模式 防止异变 大量GoF,如适配器(Adapter) ...
- B - Given Length and Sum of Digits... CodeForces - 489C (贪心)
You have a positive integer m and a non-negative integer s. Your task is to find the smallest and th ...
- pycharm调试、设置汇总
目录: 1.pycharm中不能run 2.pycharm基本调试操作 3.pycharm使用技巧 4.pycharm Error running draft: Cannot run program ...
- D10 基本数据类型(各种职业的技能分析) 主要为 int 和 str
在python中具有魔法的 职业 类型 召唤每种职业 在pychar 中 打出该职业的名称 按住Ctrl 光标在该职业名称上 点击就能看该职业的技能 1 数字 int a = " ...
- 计算机网络(6): http cookie
Cookie作用: 1)帮助管理用户会话信息(用户需要记录的信息:登陆状态等) 2)跟踪浏览器的行为 3)用户自定义设置 实现方式: 当用户浏览带有Cookie的网站时,网站自动为其生成一个唯一的标志 ...
- Java Properties基础知识总结
在Java语言中,使用一种以.properties为扩展名的文本文件作为资源文件,该类型的文件的内容格式为类似: some_key=some_value #注释描述 还有一种是使用xml文件保存项目的 ...
- 解析java实体类
对java实体类的众多理解: A .就是属性类,通常定义在model层里面 B. 一般的实体类对应一个数据表,其中的属性对应数据表中的字段. 好处: 1.对对象实体的封装,体现OO思想. 2.属性可以 ...
- Problem for Nazar CodeForces - 1151C (前缀和)
Problem for Nazar Nazar, a student of the scientific lyceum of the Kingdom of Kremland, is known for ...
- sublime text2设置快捷键打开浏览器
1 编辑一个py文件,内容如下: import sublime, sublime_plugin import webbrowser url_map = { 'C:\\server\\www\\' : ...
- 【范式与函数依赖】3NF与BCNF的区别
*本文中码指代候选码,主属性为构成码的属性. 先简要引入几个概念 图1 图2 单拿出来我认为不是很好理解的3NF和BCNF详细的说说. 书上写了,BCNF是完善后的3NF.从图2中显然得出,1-3NF ...