提交记录 16331


用户 题目 状态 得分 用时 内存 语言 代码长度
Acc_Robin 1002i. 【模板题】多项式乘法 Accepted 100 69.862 ms 17092 KB C++ 2.63 KB
提交时间 评测时间
2021-07-05 11:25:31 2021-07-05 11:25:35
#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

Subtask #1 Testcase #137.49 us64 KBAcceptedScore: 0

Subtask #1 Testcase #269.582 ms16 MB + 628 KBAcceptedScore: 0

Subtask #1 Testcase #330.62 ms7 MB + 924 KBAcceptedScore: 100

Subtask #1 Testcase #430.542 ms7 MB + 912 KBAcceptedScore: 0

Subtask #1 Testcase #539.55 us64 KBAcceptedScore: 0

Subtask #1 Testcase #637.65 us64 KBAcceptedScore: 0

Subtask #1 Testcase #738.91 us64 KBAcceptedScore: 0

Subtask #1 Testcase #866.116 ms16 MB + 292 KBAcceptedScore: 0

Subtask #1 Testcase #966.047 ms16 MB + 292 KBAcceptedScore: 0

Subtask #1 Testcase #1034.953 ms8 MB + 980 KBAcceptedScore: 0

Subtask #1 Testcase #1169.862 ms16 MB + 708 KBAcceptedScore: 0

Subtask #1 Testcase #1266.433 ms15 MB + 588 KBAcceptedScore: 0

Subtask #1 Testcase #1336.43 us64 KBAcceptedScore: 0


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