BZOJ2179——FFT快速傅立叶

来源:互联网 发布:设计软件图标 编辑:程序博客网 时间:2024/06/07 03:38

1、题意:高精度乘法。
2、分析:不是很懂虚数根的那一套理论,就知道是分治。。。

#include<bits/stdc++.h>using namespace std;#define M 270010#define pb push_back#define LL long long#define MOD 1000000007#define inf 1047483647#define vi vector<int>#define pii pair<int,int>#define llinf 4000000000000000000ll#define For(i,x,y) for(int i=(x);i<(y);i++)#define rep(i,x,y) for(int i=(x);i<=(y);i++)#define drep(i,x,y) for(int i=(x);i>=(y);i--)inline int read(){    char ch=getchar();int x=0,f=1;    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}namespace FFT{    #define Com complex<double>    int N,rev[M];    Com a[M],b[M],xx,yy;    inline void init(int n)    {        int t=0;        while((1<<(t))<=n)t++;        N=(1<<t);t--;//N=262144;t=17;        For(i,1,N)rev[i]=(rev[i/2]/2)|((i&1)<<t);    }    inline void fft(Com *a,int op)    {        For(i,0,N)if(i>rev[i])swap(a[i],a[rev[i]]);        for(int i=1;i<N;i<<=1)        {            Com w(cos(M_PI/i),op*sin(M_PI/i));            for(int j=0;j<N;j+=i*2)            {                Com e(1,0);                For(k,0,i)                {                    xx=a[j+k];yy=a[j+k+i]*e;                    a[j+k]=xx+yy;a[j+k+i]=xx-yy;                    e*=w;                }            }        }    }    inline void solve()    {        fft(a,1);fft(b,1);        For(i,0,N)a[i]=a[i]*b[i];        fft(a,-1);    }}char ch[M];int c[M];int main(){    //freopen("0input.in","r",stdin);//freopen(".out","w",stdout);    int n=read();FFT::init(n+n);    scanf("%s",ch);drep(i,n-1,0)FFT::a[n-i-1]=ch[i]-'0';    scanf("%s",ch);drep(i,n-1,0)FFT::b[n-i-1]=ch[i]-'0';    FFT::solve();For(i,0,FFT::N)c[i]=(int)(FFT::a[i].real()/FFT::N+0.5);    /*int pos=0;For(i,0,FFT::N)if(c[i])pos=i;    rep(i,0,pos/2)swap(c[i],c[pos-i]);*/    //rep(i,0,3)printf("%d\n",c[i]);    int rt=0;    For(i,0,FFT::N)    {        if(c[i])rt=i;        c[i+1]+=c[i]/10;        c[i]%=10;    }drep(i,rt,0)printf("%d",c[i]);    return 0;}
0 0
原创粉丝点击