[2017.12.2]FFT学习笔记

墙裂推荐两个博客:

http://blog.csdn.net/iamzky/article/details/22712347   画了图,写的很容易懂,配合《算法导论》服用更佳

http://blog.xlightgod.com/%e3%80%90uoj34%e3%80%91%e5%a4%9a%e9%a1%b9%e5%bc%8f%e4%b9%98%e6%b3%95/    XlightGod大佬的博客,写的很清楚,模板也非常棒

最后上我自己修改过的XlightGod的模板,符合自己风格

 1 #include<bits/stdc++.h>
 2 #define N 100010
 3 #define RG register
 4 #define inf 0x3f3f3f3f
 5 using namespace std;
 6 const double pi=acos(-1);
 7 typedef complex<double> C;
 8 C a[N],b[N];
 9 int L,m,n,R[N];
10 inline int gi(){
11     RG int x=0;RG char y=getchar();
12     while(y<‘0‘||y>‘9‘) y=getchar();
13     while(y>=‘0‘&&y<=‘9‘) x=x*10+y-‘0‘,y=getchar();
14     return x;
15 }
16 inline void fft(C *x,int y){
17     for (RG int i=0;i<n;++i)
18     if(i<R[i])
19         swap(x[i],x[R[i]]);//交换位置,数组总要换回来吧
20     for (RG int i=1;i<n;i<<=1){//待合并区间长度
21     C wn(cos(pi/i),sin(y*pi/i)),even,odd;
22     //这里就不用再*2了,因为合并后的区间长度是i的两倍(这里的i可以理解为len/2)
23     for (RG int j=0;j<n;j+=i<<1){//起始位置
24         C w(1,0);
25         for (RG int k=0;k<i;++k,w*=wn){//第几个,类似于递归版的for(i~len/2)
26         even=x[j+k];
27         odd=w*x[j+i+k];
28         x[j+k]=even+odd;
29         x[j+i+k]=even-odd;
30         }
31     }
32     }
33 }
34 int main(){
35     freopen("34.in","r",stdin);
36     freopen("34.out","w",stdout);
37     n=gi();m=gi();
38     for (RG int i=0;i<=n;++i) a[i]=gi();
39     for (RG int i=0;i<=m;++i) b[i]=gi();
40     for (m+=n,n=1;n<=m;n<<=1) ++L;
41     for (RG int i=0;i< n;++i) R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));//递推
42     fft(a,1);fft(b,1);
43     for (RG int i=0;i<=n;++i) a[i]*=b[i];
44     fft(a,-1);
45     for (RG int i=0;i<=m;++i) printf("%d ",int(a[i].real()/n+0.5));
46     return 0;
47 }

时间: 2024-10-01 18:15:23

[2017.12.2]FFT学习笔记的相关文章

2017.12.01 C#学习记录

1.占位符学习及练习及控制台用户输入练习 1 Console.WriteLine("请输入用户名:"); 2 string str1 =Console .ReadLine (); 3 Console.WriteLine("请输入密码:"); 4 string str2 = Console .ReadLine (); 5 Console.WriteLine("请确认您的密码."); 6 string str3 = Console .ReadLine

【笔记篇】(理论向)快速傅里叶变换(FFT)学习笔记w

现在真是一碰电脑就很颓废啊... 于是早晨把电脑锁上然后在旁边啃了一节课多的算导, 把FFT的基本原理整明白了.. 但是我并不觉得自己能讲明白... Fast Fourier Transformation, 快速傅里叶变换, 是DFT(Discrete Fourier Transform, 离散傅里叶变换)的快速实现版本. 据说在信号处理领域广泛的应用, 而且在OI中也有广泛的应用(比如SDOI2017 R2至少考了两道), 所以有必要学习一波.. 划重点: 其实学习FFT最好的教材是<算法导论

12.1-12.6学习笔记

#第十二章 并发编程 如果逻辑控制流在时间上重叠,那么他们就是并发的.应用级并发在以下情况中发挥作用: 1. 访问慢速I/O设备.2. 与人交互.3. 通过推迟工作以降低延迟.4. 服务多个网络客户端.5. 在多核机器上进行并行计算. 使用应用级并发的应用程序称为并发程序.现代操作系统提供了三种基本的构造并发程序的方法: - 进程.每个逻辑控制流都是一个进程,由内核来调度和维护.控制流使用显式的进程间通信(IPC)机制. - I/O多路复用.应用程序在一个进程的上下文中显式地调度他们自己的逻辑流

2016年3月12日Android学习笔记

1. //此句不能忘,否则onFling左右滑动不起作用 mLlExamView.setLongClickable(true); mLlExamView.setOnTouchListener(new mGestureListener(this)); 参考:http://www.cnblogs.com/transmuse/archive/2010/12/02/1894833.html 2.

2016/12/8前端学习笔记CSS开始。

1 无序列表 ul>li:ul里只能有li,并且li里面可放元素却很多.li是容器级标签,什么都能放. 有序列表 ul>ol:一般不用 一般都是用ul>li 2 定义列表 dl:表示定义列表 dt定义标题 dd定义表述词儿(真实案例)京东下面购物指南.用什么标签不是根据样式决定 是根据语义 3 div容器级 span文本级(只能放文字图片表单元素) 4 表单:用于收集用户信息,用户填写的. 4.1 文本框:<input type="text" value=&qu

2016/12/10前端学习笔记CSS结束+JS开始。

18 浏览器兼容问题:IE6不支持小于12px的盒子,兼容方式: height:4px; _font-size:1px; IE6不支持overflow:hidden的方法清除浮动,所以,需要 用 : overflow: hidden; 与_zoom:1;两条代码做兼容处理 css属性之前加上下划线是IE6的专有属性 例如:_background-color:red; 19 margin的塌陷:在标准文档流中竖直方向的margin会有已较大margin 为准的塌陷现象.但是浮动后没有塌陷. 20

多项式乘法(FFT)学习笔记

------------------------------------------本文只探讨多项式乘法(FFT)在信息学中的应用如有错误或不明欢迎指出或提问,在此不胜感激 多项式 1.系数表示法     一般应用最广泛的表示方式     用A(x)表示一个x-1次多项式,a[i]为$ x^i$的系数,则A(x)=$ \sum_0^{n-1}$ a[i] * $ x^i$ 仅利用这种方式求多项式乘法复杂度为O($ n^2$),不够优秀2.点值表示法     将n个互不相同的值$ x_0$...$

12.7-12.13学习笔记

虚拟存储器的三个重要功能: 将主存看做是一个存储在磁盘上的地址空间的高速缓存,在主存中只保护活动区域. 为每个进程提供了一致的地址空间,从而简化了存储器管理. 保护了每个进程的地址空间不被其他进程破坏. 9.1 物理和普通寻址 物理寻址:主存被组织成一个由M个连续的字节大小的单元组成的数组,依次类推的寻址方式称为物理寻址. 虚拟寻址:CPU生成一个虚拟地址(VA)来访问主存,在被传送到存储器之前先转换成适当的物理地址.地址翻译通过CPU芯片上的存储器管理单元完成. 9.2 地址空间 地址空间是一

2016/12/11前端学习笔记JS结束Jquery开始。

35 offsetWidth 于offsetHeight都是指盒子的实际大小,不包含margin 包含 width/height+padding+border. offsetTop与offsetLeft是表示的相对于最近的父级元素的位置.若都没有 以body为准.上述四个返回的都是数值 36 offsetParent(返回带有定位的父级若没有返回body) 注意与parentNode区分. 37 box.style.left与box.offsetLeft的区别. 1 offsetLeft可返回未