题目链接

模板题。。

#include<bits/stdc++.h>
using namespace std;
typedef int LL;
typedef double db;
namespace FFT        //使用前需要用 fft_init()函数 初始化
{
    <<;
    .14159265358979323846264338327950288L;
    struct cp
    {
        db a,b;
        cp(,)
        {
            a=a_,b=b_;
        }
        cp operator +(const cp&rhs)const
        {
            return cp(a+rhs.a,b+rhs.b);
        }
        cp operator -(const cp&rhs)const
        {
            return cp(a-rhs.a,b-rhs.b);
        }
        cp operator *(const cp&rhs)const
        {
            return cp(a*rhs.a-b*rhs.b,a*rhs.b+b*rhs.a);
        }
        cp operator !()const
        {
            return cp(a,-b);
        }
    }nw[FFT_MAXN+],f[FFT_MAXN],g[FFT_MAXN],t[FFT_MAXN];    //a<->f,b<->g,t<->c
    int bitrev[FFT_MAXN]; 

    void fft_init()    //初始化 nw[],bitrev[]
    {
        ;<<L)!=FFT_MAXN) L++;
        ;i<FFT_MAXN;i++)  bitrev[i]=bitrev[i>>]>>|((i&)<<(L-));
        ;i<=FFT_MAXN;i++) nw[i]=cp((db)cosl(*pi/FFT_MAXN*i),(db)sinl(*pi/FFT_MAXN*i));
    }

    // n已保证是2的整数次幂
    // flag=1:DFT |  flag=-1: IDFT
    )
    {
        ;<<d)*n!=FFT_MAXN) d++;
        ;i<n;i++) if(i<(bitrev[i]>>d))
            swap(a[i],a[bitrev[i]>>d]);    //    NOTICE!
        ;l<=n;l<<=)
        {
            int del=FFT_MAXN/l*flag;    // 决定 wn是在复平面是顺时针还是逆时针变化,以及变化间距
            ;i<n;i+=l) // ?????????????????
            {
                cp *le=a+i,*ri=a+i+(l>>);    // ?????????????????
                cp *w=flag==? nw:nw+FFT_MAXN;    // 确定wn的起点
                ;k<(l>>);k++)
                {
                    cp ne=*ri * *w;
                    *ri=*le-ne,*le=*le+ne;
                    le++,ri++,w+=del;
                }
            }
        }
        ) ;i<n;i++) a[i].a/=n,a[i].b/=n;
    }

    // convo(a,n,b,m,c) a[0..n]*b[0..m] -> c[0..n+m]
    void convo(LL *a,int n,LL *b,int m,LL *c)
    {//if(n<=100 && m<=100 || min(n,m)<=5)    标程用了直接暴力的方式,或许可以更快
        ;;    // N+1是c扩展后的长度
        ;i<N;i++)    // 扩展 a[],b[] ,存入f[],g[] ,以0填充新空间
        {
            f[i]=cp((db)(i<=n? a[i]:),);
            g[i]=cp((db)(i<=m? b[i]:),);
        }
        dft(f,N),dft(g,N);
        ;i<N;i++)    // 频域求积
            t[i]=f[i]*g[i];
        dft(t,N,-);
        ;i<=n+m;i++) c[i]=LL(t[i].a+0.5);
    }
}

<<|],s2[<<|],s3[<<|];
LL a[<<|],b[<<|],c[<<|];

int main()
{
    FFT::fft_init();
    while(~scanf("%s%s",s1,s2))
    {
        memset(s3,,sizeof(s3));
        ,m=strlen(s2)-;
        ;i<=n;i++)    a[i]=s1[i]-';
        ;i<=m;i++)    b[i]=s2[i]-';
        FFT::convo(a,n,b,m,c);
        c[n+m+]=;
        ;i<n+m-i;i++) swap(c[i],c[n+m-i]);
        ;i<=n+m;i++)
        {
            c[i+]+=c[i]/;
            c[i]%=;
        }
        ;
        &&len>) len--;
        ;i--) s3[len-i]=c[i]+';
        s3[len+]=;
        puts(s3);
    }
}

51nod 1028 大数乘法 V2 【FFT模板题】的更多相关文章

  1. 1028 大数乘法 V2(FFT or py)

    1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果.   Input 第1行:大数A 第2行:大数B ...

  2. FFT/NTT [51Nod 1028] 大数乘法 V2

    题目链接:51Nod 传送门 没压位,效率会低一点 1.FFT #include <cstdio> #include <cstring> #include <algori ...

  3. 51Nod 1028 大数乘法 V2

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 分析: FFT/NTT板子题... 代码: NTT板子: #inc ...

  4. 51 Nod 1028 大数乘法 V2【Java大数乱搞】

    1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A ...

  5. UOJ 34: 多项式乘法(FFT模板题)

    关于FFT 这个博客的讲解超级棒 http://blog.miskcoo.com/2015/04/polynomial-multiplication-and-fast-fourier-transfor ...

  6. 51nod 1027大数乘法

    题目链接:51nod 1027大数乘法 直接模板了. #include<cstdio> #include<cstring> using namespace std; ; ; ; ...

  7. HDU 1402 A * B Problem Plus (FFT模板题)

    FFT模板题,求A*B. 用次FFT模板需要注意的是,N应为2的幂次,不然二进制平摊反转置换会出现死循环. 取出结果值时注意精度,要加上eps才能A. #include <cstdio> ...

  8. ACM学习历程—51NOD1028 大数乘法V2(FFT)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 题目大意就是求两个大数的乘法. 但是用普通的大数乘法,这 ...

  9. 51NOD 1027 大数乘法

    1027 大数乘法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题   给出2个大整数A,B,计算A*B的结果.   Input 第1行:大数A 第2行:大数B (A,B ...

随机推荐

  1. Customizable Route Planning

    w https://www.microsoft.com/en-us/research/wp-content/uploads/2011/05/crp-sea.pdf 1 Introduction The ...

  2. ctrl+r 调用bash曾经的历史命令

    在bash界面 按ctrl+r 可以调出, bash中曾经的历史命令, 光标会停留在 第一次被匹配的字符上, (即使后面你再输入被匹配的字符, 光标也不移动) 然后, 根据你的需要 来进行任何一次的操 ...

  3. ArrayBlockingQueue 源码分析

    ArrayBlockingQueue ArrayBlockingQueue 能解决什么问题?什么时候使用 ArrayBlockingQueue? 1)ArrayBlockingQueue 是底层由数组 ...

  4. 转战 rocketmq

    接触 kafka 有一段时间了,一个人的力量实在有限,国内 rocketmq 的生态确实更好,决定换方向. rocketmq 文档地址:http://rocketmq.cloud/zh-cn/docs ...

  5. Windows Server 2008 R2 为用户“IIS APPPOOL\DefaultAppPool”授予的权限不足,无法执行此操作

    报表开发与部署好后,也嵌入到aspx页面中了,使用VS自带的Web服务器组件,一切正常,当部署到IIS中的时,出现了如下错误: 为用户“IIS APPPOOL\DefaultAppPool”授予的权限 ...

  6. jmeter之关联操作

    测试接口过程中,常常会遇到这样的一个情况:上一个请求返回的数据,另外一个接口需要要使用.那么,使用Jmeter操作时我们常常可以用“关联”来实现. 以接口“登录”和“金币充值”为例:即在做“金币充值” ...

  7. SpringBoot整合SpringMVC完成文件上传

    1.编写Controller /** * SPringBoot文件上传 */ //@Controller @RestController //表示该类下的方法的返回值会自动做json格式的转换 pub ...

  8. 简单DP入门(一) 数字三角形

    数字三角形

  9. WOJ#3882 旅行问题(POI2004)

    描述 John打算驾驶一辆汽车周游一个环形公路.公路上总共有n车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米.John必须从某个车站出发,一直按顺时针(或逆时针)方向走遍所 ...

  10. VirtualBox虚拟机与主机互通,并且虚拟机又能上网配置

    1.在Virtualbox 的全局模式下建立host-only网络,完成之后在网络邻居的属性中会出现本地连接和virtualbox host-only ethernet 连接 2.点击本地连接的属性, ...