#include<cstdio>
const int N=3e6+5,P=998244353;
int n,r[N],a[N],b[N];
int qp(int a,int b){
int r=1;
for(;b;b>>=1,a=a*1ll*a%P)if(b&1)r=r*1ll*a%P;
return r;
}
void ntt(int*a,bool b){
int i,j,k,l,p,u,v,x,y;
for(i=0;i<n;++i)if(i<r[i])j=a[i],a[i]=a[r[i]],a[r[i]]=j;
for(i=1;i<n;i<<=1)
for(l=i<<1,u=qp(b?3:332748118,(P-1)/l),j=0;j<n;j+=l)
for(v=1,k=j,p=j+i;k<p;++k,v=v*1ll*u%P)
x=a[k],y=v*1ll*a[i+k]%P,a[k]=(a[k]=x+y)<P?a[k]:a[k]-P,a[i+k]=x<y?x-y+P:x-y;
}
int main(){
int m,i,l=-1;
scanf("%d%d",&n,&m);
for(i=0;i<=n;++i)scanf("%d",a+i);
for(i=0;i<=m;++i)scanf("%d",b+i);
for(m+=n,n=1;n<=m;n<<=1)++l;
for(i=0;i<n;++i)r[i]=(r[i>>1]>>1)|((i&1)<<l);
ntt(a,1),ntt(b,1);
for(i=0;i<n;++i)a[i]=a[i]*1ll*b[i]%P;
ntt(a,0),l=qp(n,P-2);
for(i=0;i<=m;++i)printf("%d ",a[i]*1ll*l%P);
return 0;
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Subtask #1 Testcase #1 | 10.57 us | 28 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #2 | 70.222 ms | 4 MB + 456 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #3 | 32.247 ms | 1 MB + 820 KB | Accepted | Score: 100 | 显示更多 |
| Subtask #1 Testcase #4 | 32.286 ms | 1 MB + 808 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #5 | 11.69 us | 28 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #6 | 11.01 us | 28 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #7 | 10.78 us | 28 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #8 | 64.546 ms | 4 MB + 188 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #9 | 64.527 ms | 4 MB + 188 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #10 | 58.808 ms | 3 MB + 944 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #11 | 70.629 ms | 4 MB + 536 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #12 | 70.796 ms | 3 MB + 416 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #13 | 9.71 us | 28 KB | Accepted | Score: 0 | 显示更多 |