#include<bits/stdc++.h>
using namespace std;
const int N=21e5+3,P=998244353;
int n,r[N],a[N],b[N],w[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 pre(int m){
int i,j,g;
for(n=1;n<=m;n<<=1);
for(i=0,w[j=n>>1]=1;i<n;++i)r[i]=(r[i>>1]>>1)|((i&1)?j:0);
for(i=j+1,g=qp(3,(P-1)/n);i<n;++i)w[i]=w[i-1]*1ll*g%P;
for(i=j-1;i>0;--i)w[i]=w[i<<1];
}
void ntt(int*a,bool b=0){
int i,j,x,*g,*u,*v,*o;
for(i=0;i<n;++i)if(i<r[i])swap(a[i],a[r[i]]);
for(i=1;i<n;i<<=1)for(j=0;j<n;j+=i<<1)for(g=w+i,u=a+j,o=v=u+i;u!=o;++g,++u,++v)
x=*g*1ll**v%P,*v=*u<x?*u-x+P:*u-x,*u=(*u+=x)<P?*u:*u-P;
if(b)for(i=0,reverse(a+1,a+n),j=P-(P-1)/n;i<n;++i)a[i]=a[i]*1ll*j%P;
}
int main(){
int m,i;
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);
pre(m+=n),ntt(a),ntt(b);
for(i=0;i<n;++i)a[i]=a[i]*1ll*b[i]%P;
ntt(a,1);
for(i=0;i<=m;++i)printf("%d ",a[i]);
return 0;
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Subtask #1 Testcase #1 | 36.17 us | 52 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #2 | 55.001 ms | 5 MB + 480 KB | Accepted | Score: 100 | 显示更多 |
| Subtask #1 Testcase #3 | 25.371 ms | 2 MB + 332 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #4 | 25.282 ms | 2 MB + 320 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #5 | 38.14 us | 52 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #6 | 37.6 us | 52 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #7 | 36.57 us | 52 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #8 | 49.102 ms | 5 MB + 212 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #9 | 49.439 ms | 5 MB + 212 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #10 | 43.713 ms | 4 MB + 968 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #11 | 55.312 ms | 5 MB + 560 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #12 | 55.403 ms | 4 MB + 440 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #13 | 36.66 us | 52 KB | Accepted | Score: 0 | 显示更多 |