形式上跟1002太像了,然后这个是升级版,坑点在如何把前面的数据和后面的数据结合起来,因为乘法需要每一项相乘,所以用结构体表示最好了,存储ans时可以考虑1002的方法,存在一个double数组里,这样输出就又回到了1002的解决办法,代码如下
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=2010;
struct node{
int exp;
double con;
}p[maxn];
double ans[maxn]={};
int main()
{
int k,m,count=0;
cin>>k;
for (int i=0;i<k;i++)
{
scanf("%d %lf",&p[i].exp,&p[i].con);
}
cin>>m;
for (int i=0;i<m;i++)
{
int a;
double b;
scanf("%d %lf",&a,&b);
for (int j=0;j<k;j++)
{
ans[p[j].exp+a]+=p[j].con*b;
}
}
for (int i=0;i<maxn;i++)
{
if (ans[i]!=0)
count++;
}
cout<<count;
for (int i=maxn-1;i>=0;i--)
{
if (ans[i]!=0)
printf(" %d %.1f",i,ans[i]);
}
}