FFT(1)
FFT
Complex
struct complex{
double re,im;
complex(double r,double i){re=r,im=i;}
complex(){re=0.0,im=0.0;}
complex operator+(complex b){return complex(re+b.re,im+b.im);}
complex operator-(complex b){return complex(re-b.re,im-b.im);}
complex operator*(complex b){return complex(re*b.re-im*b.im,re*b.im+im*b.re);}
};
FFT
void fft(complex* a,int n,int* bitrev,int f){
for(i=0;i<n;++i) if(i<bitrev[i]) swap(a[i],a[bitrev[i]]);
for(i=1;i<n;i<<=1){
complex wn(cos(pi/i),f*sin(pi/i));
p=i<<1;
for(j=0;j<n;j+=p){
complex w(1,0);
for(k=0;k<i;++k,w=w*wn){
t=a[j+k],t2=w*a[j+k+i];
a[j+k]=t+t2,a[j+k+i]=t-t2;
}
}
}
if(f<0) for(i=0;i<n;++i) a[i].re/=n,a[i].im/=n;
}
bitrev
for(N=1;N<pt;N<<=1,++L);
for(i=0;i<N;++i) bitrev[i]=(bitrev[i>>1]>>1)|((i&1)<<(L-1));
UR#34
这题我第一次写FFT.
#include <cstdio>
#include <cmath>
struct complex{
double re,im;
complex(double r,double i){re=r,im=i;}
complex(){re=0.0,im=0.0;}
complex operator+(complex b){return complex(re+b.re,im+b.im);}
complex operator-(complex b){return complex(re-b.re,im-b.im);}
complex operator*(complex b){return complex(re*b.re-im*b.im,re*b.im+im*b.re);}
};
#define pi 3.1415926535897932384626
complex t,t2;
int i,j,k,p;
void swap(complex& a,complex& b){
t=a;
a=b;
b=t;
}
void fft(complex* a,int n,int* bitrev,int f){
for(i=0;i<n;++i) if(i<bitrev[i]) swap(a[i],a[bitrev[i]]);
for(i=1;i<n;i<<=1){
complex wn(cos(pi/i),f*sin(pi/i));
p=i<<1;
for(j=0;j<n;j+=p){
complex w(1,0);
for(k=0;k<i;++k,w=w*wn){
t=a[j+k],t2=w*a[j+k+i];
a[j+k]=t+t2,a[j+k+i]=t-t2;
}
}
}
if(f<0) for(i=0;i<n;++i) a[i].re/=n,a[i].im/=n;
}
int n,m,bitrev[1000000];
complex a[1000000],b[1000000];
int N,L,pt;
int main(){
scanf("%d%d",&n,&m);
++n;++m;
for(i=0;i<n;++i) scanf("%lf",&(a[i].re));
for(i=0;i<m;++i) scanf("%lf",&(b[i].re));
pt=n+m-1;
for(N=1;N<pt;N<<=1,++L);
for(i=0;i<N;++i) bitrev[i]=(bitrev[i>>1]>>1)|((i&1)<<(L-1));
fft(a,N,bitrev,1);
fft(b,N,bitrev,1);
for(i=0;i<N;++i) a[i]=a[i]*b[i];
fft(a,N,bitrev,-1);
for(i=0;i<pt;++i) printf("%d ", (int)(a[i].re+0.5));
return 0;
}
FFT(1)的更多相关文章
- 并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)
对32K*32K的随机数矩阵进行FFT变换,数的格式是32位浮点数.将产生的数据存放在堆上,对每一行数据进行N=32K的FFT,记录32K次fft的时间. 比较串行for循环和并行for循环的运行时间 ...
- 【BZOJ-2179&2194】FFT快速傅里叶&快速傅里叶之二 FFT
2179: FFT快速傅立叶 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2978 Solved: 1523[Submit][Status][Di ...
- 为什么FFT时域补0后,经FFT变换就是频域进行内插?
应该这样来理解这个问题: 补0后的DFT(FFT是DFT的快速算法),实际上公式并没变,变化的只是频域项(如:补0前FFT计算得到的是m*2*pi/M处的频域值, 而补0后得到的是n*2*pi/N处的 ...
- FFT NNT
算算劳资已经多久没学新算法了,又要重新开始学辣.直接扔板子,跑...话说FFT算法导论里讲的真不错,去看下就懂了. //FFT#include <cstdio> #include < ...
- CC countari & 分块+FFT
题意: 求一个序列中顺序的长度为3的等差数列. SOL: 对于这种计数问题都是用个数的卷积来进行统计.然而对于这个题有顺序的限制,不好直接统计,于是竟然可以分块?惊为天人... 考虑分块以后的序列: ...
- ECF R9(632E) & FFT
Description: 上一篇blog. Solution: 同样我们可以用fft来做...就像上次写的那道3-idoit一样,对a做k次卷积就好了. 同样有许多需要注意的地方:我们只是判断可行性, ...
- fft练习
数学相关一直都好弱啊>_< 窝这个月要补一补数学啦, 先从基础的fft补起吧! 现在做了 道. 窝的fft 模板 (bzoj 2179) #include <iostream> ...
- FFT时域与频域的关系,以及采样速率与采样点的影响
首先对于FFT来说,输入的信号是一个按一定采样频率获得的信号序列,而输出是每个采样点对应的频率的幅度(能量). 下面详细分析: 在FFT的输出数据中,第一个值是直流分量的振幅(这样对应周期有无穷的可能 ...
- 【玩转单片机系列002】 如何使用STM32提供的DSP库进行FFT
前些日子,因为需要在STM32F103系列处理器上,对采集的音频信号进行FFT,所以花了一些时间来研究如何高效并精确的在STM32F103系列处理器上实现FFT.在网上找了很多这方面的资料做实验并进行 ...
- FFT
void FFT(complex a[],int n,int fl){ ,j=n/;i<n;i++){ if (i<j) {complex t=a[i];a[i]=a[j];a[j]=t; ...
随机推荐
- [C#]Attribute特性(2)——方法的特性及特性参数
上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...
- iOS边练边学--多线程练习的多图片下载 以及 使用第三方框架(SDWebImage)的多图片下载
一.自己实现多图片下载应该注意的问题 沙盒缓存的问题 程序缓存的问题 cell重复利用显示图片混乱的问题 -- 用户拖拽快,下载图片慢导致的 解决图片混乱引入NSOperation集合的问题 资源下载 ...
- Html-Css-div标签设定-剧中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js获取select改变事件
js获取select改变事件onchage前的值 和 onclick事件 <select id="wupin_id" name="wupin_id" on ...
- 【CodeForces 520E】Pluses everywhere
题意 n个数里插入k个+号,所有式子的和是多少(取模1000000007) (0 ≤ k < n ≤ 105). 分析 1.求答案,考虑每个数作为i位数(可为答案贡献10的i-1次方,个位i=1 ...
- session共享
Nginx或者Squit反向代理到两台tomcat服务器 tomcat使用memcached tomcat连接memcached工具 cp session/*.jar /usr/local/tomca ...
- DNA repair问题
问题:Biologists finally invent techniques of repairing DNA that contains segments causing kinds of inh ...
- firefox(ff)下无法显示bootstrap图标问题的解决方案(转)
原文链接: http://www.th7.cn/web/html-css/201502/82548.shtml 后在网上搜到了解决方案,在此分享以供各位遇到问题的同好参考:在ff的地址栏中输入“abo ...
- web.xml中/与/*的区别
1.拦截"/",可以实现现在很流行的REST风格.很多互联网类型的应用很喜欢这种风格的URL.为了实现REST风格,拦截了所有的请求.同时对*.js,*.jpg等静态文件的访问也就 ...
- BZOJ1045 [HAOI2008] 糖果传递
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=987654321,表示小朋友的个数 ...