学长指点关键算法+自己模拟=解题。
#include<cstdio>
#include<iostream>#include<cstring>
using namespace std;
int a[105];
int b[105];
int t[10005];
int over[10005];
int cun[10005];
int m,n;
int main()
{
int z;
scanf("%d",&z);
while(z--)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(t,0,sizeof(t));
memset(over,0,sizeof(over));
memset(cun,0,sizeof(cun));
scanf("%d%d",&m,&n);
for(int j=0; j<m+1; j++)
scanf("%d",&a[j]);
for(int j=0; j<n+1; j++)
{
scanf("%d",&b[j]);
t[j]=b[j];
}
;
for(int j=1; j<=m; j++)
{
for(int k=0; k<j*n+1; k++)
{
if(j==1)over[k]+=a[j]*b[k];
else over[k]+=a[j]*cun[k];
}
memset(cun,0,sizeof(cun));
for(int i=0; i<j*n+1; i++)
{
for(int k=0; k<n+1; k++)
{
cun[i+k]+=t[i]*b[k];
}
}
for(int i=0; i<(j+1)*n+1; i++)
{
t[i]=cun[i];
}
}
;
printf("%d",over[0]+a[0]);
for(int j=1; j<m*n+1; j++)
printf(" %d",over[j]);
putchar('\n');
}
return 0;
}