zoukankan      html  css  js  c++  java
  • luogu1919 A*BProblem升级版 (FFT)

    把一个n位数看做n-1次的多项式,每一项的系数是反过来的每一位
    最后每一项系数进进位搞一搞就行了
    (数组一定要开到2的次数..要不然极端数据会RE)

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 using namespace std;
     6 const int maxn=132000;
     7 const double Pi=acos(-1);
     8 
     9 struct Cpx{
    10     double x,y;
    11     Cpx(double xx=0,double yy=0){x=xx;y=yy;}
    12 }X[maxn],Y[maxn];
    13 Cpx operator *(Cpx a,Cpx b){return Cpx(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
    14 Cpx operator +(Cpx a,Cpx b){return Cpx(a.x+b.x,a.y+b.y);}
    15 Cpx operator -(Cpx a,Cpx b){return Cpx(a.x-b.x,a.y-b.y);}
    16 int N,M,rev[maxn],ans[maxn];
    17 
    18 void rd(Cpx *A){
    19     char c=getchar();
    20     while(c<'0'||c>'9') c=getchar();
    21     int i=N-1;
    22     while(c>='0'&&c<='9') A[i--].x=(int)(c-'0'),c=getchar();
    23 }
    24 
    25 void fft(Cpx *A,int opt){
    26     for(int i=0;i<N;i++) if(i<rev[i]) swap(A[i],A[rev[i]]);
    27     for(int l=1;l<N;l<<=1){
    28         Cpx wn=Cpx(cos(Pi/l),opt*sin(Pi/l));int step=l<<1;
    29         for(int i=0;i<N;i+=step){
    30             Cpx w=Cpx(1,0);
    31             for(int k=0;k<l;k++,w=w*wn){
    32                 Cpx a=A[i+k],b=A[i+k+l]*w;
    33                 A[i+k]=a+b;A[i+k+l]=a-b;
    34             }
    35         }
    36     }
    37 }
    38 
    39 int main(){
    40     int i,j,k;
    41     scanf("%d",&N);M=N*2-1;
    42     rd(X);rd(Y);
    43     for(i=1,j=0;i<M;i<<=1,j++);N=i;
    44     for(i=0;i<N;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(j-1));
    45     fft(X,1);fft(Y,1);
    46     for(i=0;i<N;i++) X[i]=X[i]*Y[i];fft(X,-1);
    47     for(i=0;i<M;i++)
    48         j=(int)(X[i].x/N+0.5),ans[i+1]=(ans[i]+j)/10,ans[i]=(ans[i]+j)%10;
    49     for(i=M;i>=0&&!ans[i];i--);
    50     for(;i>=0;i--) printf("%d",ans[i]);
    51 }
  • 相关阅读:
    Finding Lines
    2020-3-3 牛客试题复盘
    2020-3-2 牛客试题复盘
    2020-02-29(观看视频笔记)
    2020-02-29(观看视频笔记)
    2020-02-29(观看视频笔记)
    2020-02-28(观看视频笔记)
    2020-02-27(观看视频笔记)
    2020-2-27 牛客试题复盘
    2020-02-26(观看视频笔记)
  • 原文地址:https://www.cnblogs.com/Ressed/p/9376999.html
Copyright © 2011-2022 走看看