zoukankan      html  css  js  c++  java
  • FFT

    mamaya我终于会FFT啦....


     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<vector>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<cstring>
     8 #include<complex>
     9 using namespace std;
    10 #define maxn 1001000
    11 #define llg long long 
    12 #define Pi acos(-1.0)
    13 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
    14 typedef complex<double> XU;
    15 
    16 struct FFT
    17 {
    18     llg rev[maxn],L,n,m,c[maxn];
    19     
    20     void fft(XU *z,llg f)
    21     {
    22         for (llg i=0;i<n;i++) if (i<rev[i]) swap(z[i],z[rev[i]]);
    23         for (llg i=1;i<n;i*=2)
    24         {
    25             XU wn(cos(Pi/i),sin(Pi/i));
    26             for (llg p=i*2,j=0;j<n;j+=p)
    27             {
    28                 XU w(1,0);
    29                 for (llg k=0;k<i;k++,w*=wn)
    30                 {
    31                     XU x=z[j+k],y=w*z[j+k+i];
    32                     z[j+k]=x+y,z[j+k+i]=x-y;
    33                 }
    34             }
    35         }
    36         if (f==-1) reverse(z+1,z+n);
    37     }
    38 
    39     XU a[maxn],b[maxn];
    40 
    41     void work()
    42     {
    43         m+=n;
    44         for (n=1;n<=m;n*=2) L++;
    45         for (llg i=0;i<n;i++) rev[i]=(rev[i/2]/2)|((i&1)<<(L-1));
    46         fft(a,1); fft(b,1);
    47         for (llg i=0;i<n;i++) a[i]=a[i]*b[i];
    48         fft(a,-1);
    49         for (llg i=0;i<=m;i++) c[i]=(llg)(a[i].real()/n+0.5);
    50     }
    51 
    52 }fft;
    53 
    54 llg read() {llg x; scanf("%lld",&x); return x;}
    55 
    56 int main()
    57 {
    58     yyj("fft");
    59     cin>>fft.n>>fft.m;
    60     for (llg i=0;i<=fft.n;i++) fft.a[i]=read();
    61     for (llg i=0;i<=fft.m;i++) fft.b[i]=read();
    62     fft.work();
    63     for (llg i=0;i<=fft.m;i++) printf("%lld ",fft.c[i]);
    64     return 0;
    65 }
    本文作者:xrdog 作者博客:http://www.cnblogs.com/Dragon-Light/ 转载请注明出处,侵权必究,保留最终解释权!
  • 相关阅读:
    PHP $_SERVER变量
    Buddy system伙伴分配器实现
    Linux iconv使用
    内存管理(memory allocation内存分配)
    内存碎片
    《STL源码剖析》chapter2空间配置器allocator
    Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
    c++ explicit
    《STL源码剖析》环境配置
    C++ STL的各种实现版本
  • 原文地址:https://www.cnblogs.com/Dragon-Light/p/6486052.html
Copyright © 2011-2022 走看看