zoukankan      html  css  js  c++  java
  • 51Nod 1028 大数乘法 V2

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028

    分析:

    FFT/NTT板子题...

    代码:

    NTT板子:

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    //by NeighThorn
    using namespace std;
    
    const int maxn=500000+5,mod=998244353,G=3;
    
    int n,m,L,len1,len2,R[maxn],a[maxn],b[maxn];
    
    char ch[2][maxn];
    
    inline int power(long long x,int y){
    	long long res=1;
    	while(y){
    		if(y&1)
    			res=res*x%mod;
    		x=x*x%mod,y>>=1;
    	}
    	return res;
    }
    
    inline void NTT(int *a,int f){
    	for(int i=0;i<n;i++)
    		if(i<R[i]) swap(a[i],a[R[i]]);
    	for(int i=1;i<n;i<<=1){
    		int wn=power(G,(mod-1)/(i<<1));
    		if(f==-1) wn=power(wn,mod-2);
    		for(int j=0;j<n;j+=(i<<1)){
    			int w=1;
    			for(int k=0;k<i;k++,w=1LL*w*wn%mod){
    				int x=a[j+k],y=1LL*w*a[j+k+i]%mod;
    				a[j+k]=((x+y)%mod+mod)%mod;
    				a[j+k+i]=((x-y)%mod+mod)%mod;
    			}
    		}
    	}
    	if(f==-1){
    		int tmp=power(n,mod-2);
    		for(int i=0;i<n;i++)
    			a[i]=1LL*a[i]*tmp%mod;
    	}
    }
    
    signed main(void){
    	scanf("%s",ch[0]);len1=strlen(ch[0])-1;
    	scanf("%s",ch[1]);len2=strlen(ch[1])-1;
    	for(int i=0;i<=len1;i++) a[i]=ch[0][len1-i]-'0';
    	for(int i=0;i<=len2;i++) b[i]=ch[1][len2-i]-'0';
    	n=max(len1,len2);m=n<<1;for(n=1;n<=m;n<<=1) L++;
    	for(int i=0;i<n;i++)
    		R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));
    	NTT(a,1),NTT(b,1);
    	for(int i=0;i<n;i++) a[i]=1LL*a[i]*b[i]%mod;
    	NTT(a,-1);
    	for(int i=0;i<m;i++)
    		if(a[i]>=10)
    			a[i+1]+=a[i]/10,a[i]%=10;
    	while(!a[m]) m--;
    	for(int i=m;i>=0;i--) printf("%d",a[i]);puts("");
    	return 0;
    }
    

      


    By NeighThorn

  • 相关阅读:
    COGS 14. [网络流24题] 搭配飞行员
    洛谷 P3376 【模板】网络最大流
    洛谷 P2936 [USACO09JAN]全流Total Flow
    codevs 2038 香甜的黄油 USACO
    codevs 1993 草地排水 USACO
    Openjudge 2.5 6264:走出迷宫
    洛谷 P1744 采购特价商品
    HDU
    中国剩余定理
    bzoj2157: 旅游
  • 原文地址:https://www.cnblogs.com/neighthorn/p/6491320.html
Copyright © 2011-2022 走看看