这道题大意就是多项式乘法,按照正常思维逐项相乘就好了,要注意的结果的指数可能大于2000,结果数组开大点,这道题应该就没什么问题了。
#include<bits/stdc++.h>
using namespace std;
main()
{
double a[1005] = {0};
double b[1005] = {0};
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int exp;
double co;
scanf("%d %lf",&exp,&co);
a[exp] = co;
}
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int exp;
double co;
scanf("%d %lf",&exp,&co);
b[exp] = co;
}
double res[2005] = {0};
for(int i=0;i<1005;i++)
{
for(int j=0;j<1005;j++)
{
res[i+j] += b[j] * a[i];
}
}
int cnt=0;
for(int i=0;i<2005;i++)
if(res[i]!=0)
cnt++;
printf("%d",cnt);
for(int i=2000;i>0;i--)
if(res[i]!=0)
printf(" %d %.1lf",i,res[i]);
}