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)的更多相关文章

  1. 并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)

    对32K*32K的随机数矩阵进行FFT变换,数的格式是32位浮点数.将产生的数据存放在堆上,对每一行数据进行N=32K的FFT,记录32K次fft的时间. 比较串行for循环和并行for循环的运行时间 ...

  2. 【BZOJ-2179&2194】FFT快速傅里叶&快速傅里叶之二 FFT

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2978  Solved: 1523[Submit][Status][Di ...

  3. 为什么FFT时域补0后,经FFT变换就是频域进行内插?

    应该这样来理解这个问题: 补0后的DFT(FFT是DFT的快速算法),实际上公式并没变,变化的只是频域项(如:补0前FFT计算得到的是m*2*pi/M处的频域值, 而补0后得到的是n*2*pi/N处的 ...

  4. FFT NNT

    算算劳资已经多久没学新算法了,又要重新开始学辣.直接扔板子,跑...话说FFT算法导论里讲的真不错,去看下就懂了. //FFT#include <cstdio> #include < ...

  5. CC countari & 分块+FFT

    题意: 求一个序列中顺序的长度为3的等差数列. SOL: 对于这种计数问题都是用个数的卷积来进行统计.然而对于这个题有顺序的限制,不好直接统计,于是竟然可以分块?惊为天人... 考虑分块以后的序列: ...

  6. ECF R9(632E) & FFT

    Description: 上一篇blog. Solution: 同样我们可以用fft来做...就像上次写的那道3-idoit一样,对a做k次卷积就好了. 同样有许多需要注意的地方:我们只是判断可行性, ...

  7. fft练习

    数学相关一直都好弱啊>_< 窝这个月要补一补数学啦, 先从基础的fft补起吧! 现在做了 道. 窝的fft 模板 (bzoj 2179) #include <iostream> ...

  8. FFT时域与频域的关系,以及采样速率与采样点的影响

    首先对于FFT来说,输入的信号是一个按一定采样频率获得的信号序列,而输出是每个采样点对应的频率的幅度(能量). 下面详细分析: 在FFT的输出数据中,第一个值是直流分量的振幅(这样对应周期有无穷的可能 ...

  9. 【玩转单片机系列002】 如何使用STM32提供的DSP库进行FFT

    前些日子,因为需要在STM32F103系列处理器上,对采集的音频信号进行FFT,所以花了一些时间来研究如何高效并精确的在STM32F103系列处理器上实现FFT.在网上找了很多这方面的资料做实验并进行 ...

  10. 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; ...

随机推荐

  1. [C#]Attribute特性(2)——方法的特性及特性参数

    上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...

  2. iOS边练边学--多线程练习的多图片下载 以及 使用第三方框架(SDWebImage)的多图片下载

    一.自己实现多图片下载应该注意的问题 沙盒缓存的问题 程序缓存的问题 cell重复利用显示图片混乱的问题 -- 用户拖拽快,下载图片慢导致的 解决图片混乱引入NSOperation集合的问题 资源下载 ...

  3. Html-Css-div标签设定-剧中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. js获取select改变事件

    js获取select改变事件onchage前的值 和 onclick事件 <select id="wupin_id" name="wupin_id" on ...

  5. 【CodeForces 520E】Pluses everywhere

    题意 n个数里插入k个+号,所有式子的和是多少(取模1000000007) (0 ≤ k < n ≤ 105). 分析 1.求答案,考虑每个数作为i位数(可为答案贡献10的i-1次方,个位i=1 ...

  6. session共享

    Nginx或者Squit反向代理到两台tomcat服务器 tomcat使用memcached tomcat连接memcached工具 cp session/*.jar /usr/local/tomca ...

  7. DNA repair问题

    问题:Biologists finally invent techniques of repairing DNA that contains segments causing kinds of inh ...

  8. firefox(ff)下无法显示bootstrap图标问题的解决方案(转)

    原文链接: http://www.th7.cn/web/html-css/201502/82548.shtml 后在网上搜到了解决方案,在此分享以供各位遇到问题的同好参考:在ff的地址栏中输入“abo ...

  9. web.xml中/与/*的区别

    1.拦截"/",可以实现现在很流行的REST风格.很多互联网类型的应用很喜欢这种风格的URL.为了实现REST风格,拦截了所有的请求.同时对*.js,*.jpg等静态文件的访问也就 ...

  10. BZOJ1045 [HAOI2008] 糖果传递

    Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=987654321,表示小朋友的个数 ...