1 条题解
-
0
C++ :
#include"bits/stdc++.h" using namespace std; typedef long long LL; namespace io{ const int L=(1<<18)+1; char _buf[L],*S,*T,c; char gc(){ if(S==T){ T=(S=_buf)+fread(_buf,1,L,stdin); return S==T?EOF:*S++; } return *S++; } template<class I>void gi(I&x){ for(c=gc();c<'0'||c>'9';c=gc());x=c&15; for(c=gc();c>='0'&&c<='9';c=gc())x=x*10+(c&15); } void gs(char*s){for(c=gc();c>='a'&&c<='z';c=gc())*s++=c;} char ro(){for(c=gc();c<'A'||c>'Z';c=gc());return c;} char obuf[L],*op=obuf,*end=obuf+(L-1); void writechar(char x){*op++=x;if(op==end)fwrite(obuf,1,L-1,stdout),op=obuf;} void cbuf(){fwrite(obuf,1,op-obuf,stdout),op=obuf;} char st[25];int tp; template<class T>inline void print(register T a){ if(!a)writechar('0');while(a)st[++tp]=a%10+'0',a/=10;while(tp)writechar(st[tp--]); } }; using io::ro; using io::gi; using io::gs; using io::writechar; using io::print; #define space writechar(' ') #define ln writechar('\n') const int Mod=1000003,m1=998244353,m2=1004535809,pwMod=Mod-1,N=100005,M=1050005; const LL P=1002772198720536577LL; inline int CRT(int r1,int r2){ return (((r1-r2)*334845110LL%m2*m1+r1)%P+P)%P%Mod; } int power(int a,int t,int P){ int r=1; while(t){ if(t&1)r=(LL)r*a%P; a=(LL)a*a%P;t>>=1; } return r; } int inv(int a,int P){ return power(a,P-2,P); } int _wn[25],_w[M]; void NTT(int*a,int len,int dft,int P){ int i,j=len>>1,k,l,w,wn,c=0,u,v; for(i=1;i<len-1;i++){ if(i<j)swap(a[i],a[j]); for(k=len>>1;(j^=k)<k;k>>=1); } for(i=0;i<=21;i++)_wn[i]=power(3,P-1>>i,P); for(l=2;l<=len;l<<=1){ i=l>>1,wn=_wn[++c]; for(_w[0]=1,i=l>>1,j=1;j<i;j++)_w[j]=(LL)_w[j-1]*wn%P; for (j=0;j<len;j+=l)for(k=0;k<i;k++) { u=a[j+k],v=(LL)a[j+k+i]*_w[k]%P; a[j+k]=(u+v)%P;a[j+k+i]=(u-v+P)%P; } } if(dft==-1){ int inv_len=power(len,P-2,P); for(int i=0;i<len;i++)a[i]=(LL)a[i]*inv_len%P; for(int i=1;i<len/2;i++)swap(a[i],a[len-i]); } } int w1[M],w2[M],w3[M],w4[M]; void convol(int*A,int*B,int*R,int len){ memcpy(w1,A,len<<2); memcpy(w2,B,len<<2); NTT(w1,len,1,m1); NTT(w2,len,1,m1); for(int i=0;i<len;i++)w3[i]=(LL)w1[i]*w2[i]%m1; NTT(w3,len,-1,m1); memcpy(w1,A,len<<2); memcpy(w2,B,len<<2); NTT(w1,len,1,m2); NTT(w2,len,1,m2); for(int i=0;i<len;i++)w4[i]=(LL)w1[i]*w2[i]%m2; NTT(w4,len,-1,m2); for(int i=0;i<len;i++)R[i]=CRT(w3[i],w4[i]); } int n,m,b,c,d,e,a[N],w,z,A[N<<1],p[N<<1],fac[N<<1],ifac[N<<1],x[M],y[M],h[M],L,cpw[M],icpw[M]; int gl(int n){ int l=1; while(l<=n*2)l<<=1; return l; } int ABS(int x){return x<0?-x:x;} void solve(){ static int z[M]={0}; b=d,d=e; for(L=1;L<=n*2;L<<=1); memset(x,0,L<<2); memset(y,0,L<<2); for(int i=0,dw=1;i<n;i++){ x[n-i]=(LL)dw*fac[i]*a[i]%Mod; y[i]=ifac[i];dw=(LL)dw*d%Mod; } convol(x,y,z,L); for(int i=0;i<n;i++)p[i]=z[n-i]; L<<=1; memset(x,0,L<<2); memset(y,0,L<<2); int w=(LL)b*power(d,Mod-2,Mod)%Mod,qw=1; for(int i=0;i<n;i++){ x[i]=(LL)ifac[i]*qw*p[i]%Mod*cpw[i]%Mod; qw=(LL)qw*w%Mod; } for(int i=0;i<2*n;i++)y[i]=icpw[ABS(i-n)]; convol(x,y,z,L); for(int i=0;i<n;i++)print((LL)cpw[i]*z[i+n]%Mod),ln; io::cbuf(); } void work(){ int ans=0; for(int i=0,w=1;i<n;i++){ (ans+=(LL)w*a[i]%Mod)%=Mod; w=(LL)(b+d+e)*w%Mod; } print(ans),ln;ans=0; for(int i=0,w=1;i<n;i++){ (ans+=(LL)w*a[i]%Mod)%=Mod; w=(LL)w*e%Mod; } for(int i=1;i<n;i++)print(ans),ln; io::cbuf(); } int main(){ gi(n),gi(b),gi(c),gi(d),gi(e); for(int i=0;i<n;i++)gi(a[i]); m=2*n-1; fac[0]=1; for(int i=1;i<=m;i++)fac[i]=(LL)fac[i-1]*i%Mod; ifac[m]=inv(fac[m],Mod); for(int i=m;i>=1;i--)ifac[i-1]=(LL)ifac[i]*i%Mod; cpw[0]=icpw[0]=1; LL fc=c,ifc=power(c,Mod-2,Mod),step=c,istep=ifc; for(int i=1;i<=m;i++){ cpw[i]=(LL)cpw[i-1]*step%Mod; icpw[i]=(LL)icpw[i-1]*istep%Mod; step=(LL)step*fc*fc%Mod; istep=(LL)istep*ifc*ifc%Mod; } if(c==0){work(),exit(0);} if(b==0){solve(),exit(0);} w=(LL)d*inv(b<<1,Mod)%Mod; z=((LL)e*inv(b,Mod)-(LL)w*w%Mod+Mod)%Mod; for(int i=0,pwz=1,pwb=1;i<n;i++){ x[i]=(LL)a[i]*pwb*fac[i]%Mod; y[n-i]=(LL)pwz*ifac[i]%Mod; pwz=(LL)pwz*z%Mod; pwb=(LL)pwb*b%Mod; } convol(x,y,h,gl(n)); for(int i=0,pwb=1;i<n;i++)A[2*i]=(LL)h[i+n]*ifac[i]%Mod; memset(x,0,gl(n)<<2); memset(y,0,gl(n)<<2); for(int i=0,pww=1;i<m;i++){ x[i]=(LL)A[i]*fac[i]%Mod; y[m-i]=(LL)pww*ifac[i]%Mod; pww=(LL)pww*w%Mod; } convol(x,y,h,gl(m)); for(int i=0;i<m;i++)p[i]=(LL)h[i+m]*ifac[i]%Mod; memset(x,0,gl(m)<<3); memset(y,0,gl(m)<<3); for(int i=0;i<m;i++)x[i]=(LL)p[i]*cpw[i]%Mod; for(int i=0;i<m*2;i++)y[i]=icpw[ABS(i-m)]; convol(x,y,h,gl(m)<<1); for(int i=0;i<n;i++)print((LL)h[i+m]*cpw[i]%Mod),ln; io::cbuf(); return 0; }
- 1
信息
- ID
- 1029
- 时间
- 3000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者