提交记录 15209


用户 题目 状态 得分 用时 内存 语言 代码长度
asd_a 1002i. 【模板题】多项式乘法 Compile Error 0 0 ns 0 KB C++ 2.61 KB
提交时间 评测时间
2020-12-14 11:17:44 2020-12-14 11:17:45

	for(int i=0;i<n;i++)scanf("%d",f+#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
inline int fp(int x,int y){
	int ans=1;for(;y;y>>=1,x=1ll*x*x%mod)
		if(y&1)ans=1ll*ans*x%mod;
	return ans;
}
namespace Poly{
	const int N=1<<21|5;
	const int gen=3,ivg=332748118;
	int A[N],B[N],rev[N];
	struct lsp{
		int pw1[1<<15|5],pw2[1<<15|5],block;
		lsp(int x=0){
			pw1[0]=pw2[0]=1;block=1<<15;
			for(int i=1;i<=block;i++)
				pw1[i]=1ll*pw1[i-1]*x%mod;
			for(int i=1;i*block<=mod;i++)
				pw2[i]=1ll*pw2[i-1]*pw1[block]%mod;
		}inline int operator [](int x){
			if(x<0)x+=mod-1;
			return 1ll*pw1[x&32767]*pw2[x>>15]%mod;
		}
	}pw[2]={ivg,gen};
	inline void ntt(int *a,int lim,int fl=1){
		for(int i=0;i<lim;i++){
			rev[i]=(rev[i>>1]>>1)|((i&1)*(lim>>1));
			if(i<rev[i])swap(a[i],a[rev[i]]);
		}for(int k=1,o=1;k<lim;k<<=1,o++){
			for(int j=0;j<lim;j+=(k<<1))
				for(int i=j;i<j+k;i++){
					int t=1ll*pw[fl][(mod>>o)*(i-j)]*a[i+k]%mod;
					a[i+k]=(a[i]+mod-t)%mod;
					a[i]=(a[i]+t)%mod;
				}
		}if(!fl)for(int i=0,ivlim=fp(lim,mod-2);i<lim;i++)a[i]=1ll*a[i]*ivlim%mod;
	}
	inline void clra(int *a,int x){fill(a,a+x,0);}
	struct poly{
		basic_string<int>f;
		int n;
		poly(int x=0){
			f.clear();n=0;
			if(x)f+=x,++n;
		}poly(int *a,int x){n=x;f.clear();for(int i=0;i<n;i++)f+=a[i];}
		poly(basic_string<int>& a,int x){n=x;f.clear();for(int i=0;i<n;i++)f+=a[i];}
		int& operator [](int x){return f[x];}
		const int operator [](int x)const{return f[x];}
		inline int size(){return n;}
		inline void resize(int x){f.resize(n=x);}
		inline poly getp(int x){
			for(int i=0;i<n&&i<x;i++)A[i]=f[i];poly a=poly(A,x);clra(A,x);return a;
		}
		inline void getarry(int *a){
			for(int i=0;i<n;i++)a[i]=f[i];
		}
		inline poly operator *(poly a){
			getarry(A);a.getarry(B);int lim=1;
			while(lim<n+a.n)lim<<=1;ntt(A,lim);ntt(B,lim);
			for(int i=0;i<lim;i++)A[i]=1ll*A[i]*B[i]%mod;
			ntt(A,lim,0);poly b=poly(A,n+a.n-1);
			clra(A,lim);clra(B,lim);return b;
		}inline poly operator +(poly a){
			getarry(A);a.getarry(B);int lim=max(n,a.n);
			for(int i=0;i<lim;i++)A[i]=(A[i]+B[i])%mod;
			poly b=poly(A,lim);return b;
		}inline poly operator -(poly a){
			getarry(A);a.getarry(B);int lim=max(n,a.n);
			for(int i=0;i<lim;i++)A[i]=(A[i]+mod-B[i])%mod;
			poly b=poly(A,lim);return b;
		}
		inline poly inv(){
			poly a(fp(f[0],mod-2));
			for(int i=1;i<n;i<<=1){
				poly b=a*a;
				b=b*getp(i<<1);
				a=a+a-b.getp(i<<1);
			}
			return a.getp(n);
		}
	};
}
using Poly::poly;
const int N=1e6+5;
int f[N],n;
poly g;
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++)scanf("%d",f+i);
	g=poly(f,n).inv();
	for(int i=0;i<n;i++)printf("%d ",g[i]);
	return 0;
}

CompilationN/AN/ACompile ErrorScore: N/A


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