• luogu P1919 【模板】A*B Problem升级版(FFT快速傅里叶)|FFT


    题目描述

    给你两个正整数 a,b,求 a×b。

    输入格式

    第一行一个正整数,表示 a;
    第二行一个正整数,表示 b。

    输出格式

    输出一行一个整数表示答案。

    #include<cmath>
    #include<string>  
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int _=4e6+10;
    const double Pi=acos(-1.0);
    #define db double
    struct lex{
    	db x,y;
    	lex(db _x=0,db _y=0){x=_x;y=_y;}
    	lex operator + (const lex &b)const{return lex(x+b.x,y+b.y);}
    	lex operator - (const lex &b)const{return lex(x-b.x,y-b.y);}
    	lex operator * (const lex &b)const{return lex(x*b.x-y*b.y,x*b.y+y*b.x);}
    }a[_],b[_];
    int N,M;
    inline void fft(int lim,lex *a,int op){
    	if(lim==1)return;
    	lex a1[(lim>>1)+5],a2[(lim>>1)+5];
    	for(int i=0;i<lim;i+=2)a1[i>>1]=a[i],a2[i>>1]=a[i+1];
    	fft(lim>>1,a1,op);
    	fft(lim>>1,a2,op);
    	lex Wn=lex(cos(2.0*Pi/lim),op*sin(2.0*Pi/lim));
    	lex w=lex(1,0);
    	for(int i=0;i<(lim>>1);i++,w=w*Wn){
    		a[i]=a1[i]+w*a2[i];
    		a[i+(lim>>1)]=a1[i]-w*a2[i];
    	}
    }
    int ans[_],AA,BB;
    signed main(){
    	string s1,s2; cin>>s1>>s2;
    	N=s1.length(); M=s2.length();
    	register int i;
    	for(i=N-1;i>=0;i--)a[AA++].x=s1[i]-'0';
    	for(i=M-1;i>=0;i--)b[BB++].x=s2[i]-'0';
    	register int lim=1; while(lim<=N+M)lim<<=1;
    	fft(lim,a,1);
    	fft(lim,b,1);
    	for(i=0;i<=lim;i++)a[i]=a[i]*b[i];
    	fft(lim,a,-1);
    	for(i = 0; i <= lim; i++) {
            ans[i]+=(int)(a[i].x/lim+0.5);
            if(ans[i]>=10)ans[i + 1]+=ans[i]/10,ans[i]%=10,lim+=(i==lim);
        }
        while(!ans[lim] && lim >= 1) lim -- ;
        lim ++ ;
        while(--lim>= 0)printf("%d",ans[lim]);
        return 0 ;
    }
    
  • 相关阅读:
    Git-Runoob:Git 查看提交历史
    Git-Runoob:Git 分支管理
    Git-Runoob:Git 基本操作
    Git-Runoob:Git 创建仓库
    weblogic11g 安装集群 —— win2003 系统、单台主机
    关于条件宏的易错点
    关于端口号你知道多少!
    POJ 2114 Boatherds【Tree,点分治】
    Android应用开发学习笔记之Intent
    对于接收到的GPS信息详解
  • 原文地址:https://www.cnblogs.com/naruto-mzx/p/12106243.html
Copyright © 2020-2023  润新知