#include<iostream>
#include<cmath>
#include<cstdio>
#define re register
using namespace std;
inline int read()
{
char ch=getchar();int flag=1,x=0;
while(ch<'0'||ch>'9') {if(ch=='-') flag=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*flag;
}
const double pi=acos(-1.0);
struct complex
{
double x,y;
complex(double xx=0,double yy=0){x=xx,y=yy;}
}a[10000001],b[10000001];
complex operator + (complex a,complex b){return complex(a.x+b.x,a.y+b.y);}
complex operator - (complex a,complex b){return complex(a.x-b.x,a.y-b.y);}
complex operator * (complex a,complex b){return complex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
int n,m;
int l,r[10000001];
int limit=1;
inline void FFT(complex *A,int type)
{
for(re int i=0;i<limit;i++)
if(i<r[i]) swap(A[i],A[r[i]]);
for(int mid=1;mid<limit;mid<<=1)
{
complex wn(cos(pi/mid),type*sin(pi/mid));
for(re int R=mid<<1,j=0;j<limit;j+=R)
{
complex w(1,0);
for(re int k=0;k<mid;k++,w=w*wn)
{
complex x=A[j+k],y=w*A[j+mid+k];
A[j+k]=x+y;
A[j+mid+k]=x-y;
}
}
}
}
int main()
{
n=read(),m=read();
for(re int i=0;i<=n;++i) a[i].x=read();
for(re int i=0;i<=m;++i) b[i].x=read();
while(limit<=n+m) limit<<=1,++l;
for(re int i=0;i<limit;++i)
r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
FFT(a,1),FFT(b,1);
for(re int i=0;i<=limit;i++) a[i]=a[i]*b[i];
FFT(a,-1);
for(re int i=0;i<=n+m;i++)
printf("%d ",(int)(a[i].x/limit+0.5));
}
照着第一篇题解打的模板,#8#9TLE,每个点空间都有很大的占用,求调