zoukankan      html  css  js  c++  java
  • 快速傅里叶变换

    study from:

    http://www.cnblogs.com/zwfymqz/p/8244902.html

    https://blog.csdn.net/enjoy_pascal/article/details/81478582

    luogu3803

    https://www.luogu.org/problemnew/show/P3803

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <set>
     6 #include <map>
     7 #include <list>
     8 #include <queue>
     9 #include <vector>
    10 #include <bitset>
    11 #include <iostream>
    12 using namespace std;
    13 
    14 const int maxn=(1e6+10)*4;///相乘,最多2e6位,同时要加到min 2^k>2e6,乘2即可
    15 const double pi=acos(-1);
    16 
    17 struct Complex
    18 {
    19     double x,y;
    20     ///otherwise create Complex(){}
    21     Complex(double xx=0,double yy=0)
    22     {
    23         x=xx;
    24         y=yy;
    25     }
    26     Complex operator+(const Complex &b) const
    27     {
    28         return Complex(x+b.x,y+b.y);
    29     }
    30     Complex operator-(const Complex &b) const
    31     {
    32         return Complex(x-b.x,y-b.y);
    33     }
    34     Complex operator*(const Complex &b) const
    35     {
    36         return Complex(x*b.x-y*b.y,x*b.y+y*b.x);
    37     }
    38 }a[maxn],b[maxn];
    39 
    40 int w=0,s,r[maxn];
    41 
    42 void fft(Complex *a,int inv)
    43 {
    44     int i,j,m;
    45     for (i=0;i<s;i++)
    46         if (i<r[i])
    47             swap(a[i],a[r[i]]);
    48     for (m=1;m<s;m<<=1)
    49     {
    50         Complex temp(cos(pi/m),inv*sin(pi/m));
    51         for (i=0;i<s;i+=m*2)
    52         {
    53             Complex mul(1,0);
    54             for (j=0;j<m;j++,mul=mul*temp)
    55             {
    56                 Complex x=a[i+j],y=mul*a[i+j+m];
    57                 a[i+j]=x+y,a[i+j+m]=x-y;
    58             }
    59         }
    60     }
    61 }
    62 
    63 int main()
    64 {
    65     int n,m,i;
    66     scanf("%d%d",&n,&m);
    67     for (i=0;i<=n;i++)
    68         scanf("%lf",&a[i].x);
    69     for (i=0;i<=m;i++)
    70         scanf("%lf",&b[i].x);
    71     s=1;
    72     while (s<=n+m)  //n+m+1
    73         s<<=1,w++;
    74     for (i=0;i<s;i++)
    75         r[i]=(r[i>>1]>>1) | ((i & 1)<<(w-1));
    76     fft(a,1);
    77     fft(b,1);
    78     for (i=0;i<=s;i++)
    79         a[i]=a[i]*b[i];
    80     fft(a,-1);
    81     for (i=0;i<=n+m;i++)
    82         printf("%d ",(int)(a[i].x/s+0.5));
    83     return 0;
    84 }

    NTT
    ......

    FWT

    https://www.cnblogs.com/cjyyb/p/9065615.html

  • 相关阅读:
    poj_2417 (baby_step,giant_step算法)
    多校第4场1012
    欧拉回路小结:hihocoder49,50,51
    xor问题的小结(HDU_5269 && HDU_5270 && NEU_1600)
    2015年大连邀请赛F题
    字符串处理——Tire树__LA3942
    15陕西省赛——数学题——n维空间切d刀共能分成多少份???
    ACM荣耀之路;
    选课时间!
    二叉树模板!
  • 原文地址:https://www.cnblogs.com/cmyg/p/10413497.html
Copyright © 2011-2022 走看看