提交记录 16330


用户 题目 状态 得分 用时 内存 语言 代码长度
Acc_Robin 1004. 【模板题】高精度乘法 Wrong Answer 0 31.312 ms 9828 KB C++ 2.63 KB
提交时间 评测时间
2021-07-05 11:24:54 2021-07-05 11:24:57
#include<bits/stdc++.h>
using namespace std;
namespace Acc{
#define BUFSIZE 20000000
#define ll long long
#define ull unsigned long long
#define clr(f,n) memset(f,0,sizeof(int)*n)
#define cpy(f,g,n) memcpy(f,g,sizeof(int)*n)
	struct read{
		#define gc() (p1==p2&&(p2=buf+fread(p1=buf,1,BUFSIZE,stdin),p1==p2)?EOF:*p1++)
		read():p1(buf),p2(buf){}
		char buf[BUFSIZE],*p1,*p2,c;
		inline read&operator>>(int&x){
			int f=0;
			for(c=gc(),x=0;c!=EOF&&!isdigit(c);c=gc())if(c=='-')f=1;
			for(;isdigit(c);c=gc())x=(x<<3)+(x<<1)+(c^48);
			x=f?-x:x;
			return *this;
		}
	}in;
    void opt(int*a,int n){
        for(int i=0;i<n;i++)cout<<a[i]<<' ';
        puts("\n");
    }

	const int _g=3,_ig=332748118,mod=998244353,N=1e6+10;
	int qpow(int a,int b=mod-2){
		int r=1;for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)r=1ll*r*a%mod;return r;
	}
    int rn=-1,rev[N<<1];
	void rpre(int n){
		if(rn==n)return;rn=n;
		for(int i=0;i<n;i++)rev[i]=(rev[i>>1]>>1)|((i&1)?n>>1:0);
	}
    void px(int*f,int*g,int n){for(int i=0;i<n;i++)f[i]=1ll*f[i]*g[i]%mod;}
    void invp(int*f,int n){
        
    }




	void NTT(int*g,int inv,int n){
		rpre(n);
		static ull f[N<<1],w[N<<1];w[0]=1;
		for(int i=0;i<n;i++)f[i]=(((ll)mod<<5)+g[rev[i]])%mod;
		for(int l=1;l<n;l<<=1){
			ull tmp=qpow(inv?_g:_ig,(mod-1)/(l<<1));
			for(int i=1;i<l;i++)w[i]=w[i-1]*tmp%mod;
			for(int i=0;i<n;i+=(l<<1))
				for(int j=0;j<l;j++){
					int tt=w[j]*f[l|i|j]%mod;
					f[l|i|j]=f[i|j]+mod-tt;
					f[i|j]+=tt;
                }
			if(l==(1<<10))for(int i=0;i<n;i++)f[i]%=mod;
		}
		if(!inv){
			ull invn=qpow(n);
			for(int i=0;i<n;++i)g[i]=f[i]%mod*invn%mod;
		}else for(int i=0;i<n;i++)g[i]=f[i]%mod;
	}
	void times(int*f,int*g,int len,int lim){
		static int sav[N<<1];
		int n=1;for(;n<len+len;n<<=1);
		clr(sav,n),cpy(sav,g,n);
		NTT(f,1,n),NTT(g,1,n),px(f,g,n),NTT(f,0,n);
		clr(f+lim,n-lim),clr(sav,n);
	}
	int n,m,F[N<<1],G[N<<1];
	void work(){
		in>>n>>m;
		for(int i=0;i<=n;i++)in>>F[i];
		for(int i=0;i<=m;i++)in>>G[i];
		for(m+=n,n=1;n<=m;n<<=1);
		times(F,G,m,n);
		for(int i=0;i<=m;i++)cout<<F[i]<<' ';
	}
}
int main(){
	return Acc::work(),0;
}
/*
void invp(int *f,int m)
{
  int n;for (n=1;n<m;n<<=1);
  static int w[Maxn<<1],r[Maxn<<1],sav[Maxn<<1];
  w[0]=powM(f[0]);
  for (int len=2;len<=n;len<<=1){
    for (int i=0;i<(len>>1);i++)
      r[i]=(w[i]<<1)%mod;
    cpy(sav,f,len);
    NTT(w,1,len<<1);px(w,w,len<<1);
    NTT(sav,1,len<<1);px(w,sav,len<<1);
    NTT(w,0,len<<1);clr(w+len,len);
    for (int i=0;i<len;i++)
      w[i]=(r[i]-w[i]+mod)%mod;
  }cpy(f,w,m);clr(sav,n+n);clr(w,n+n);clr(r,n+n);
}
int n,F[Maxn<<1];
int main()
{
  n=read();
  for (int i=0;i<n;i++)F[i]=read();
  invp(F,n);print(F,n);
  return 0;
}
*/

CompilationN/AN/ACompile OKScore: N/A

Testcase #131.312 ms9 MB + 612 KBWrong AnswerScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-19 10:05:27 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠