用map存储系数和值得关系
#include <map>
#include <stdio.h>
using namespace std;
map<int,double> a;
map<int,double> b;
map<int,double> c;
int main(){
freopen("in.txt","r",stdin);
int x;
scanf("%d",&x);
for(int i=0;i<x;i++){
int m;
double n;
scanf("%d %lf",&m,&n);
a[m]=n;
}
scanf("%d",&x);
for(int i=0;i<x;i++){
int m;
double n;
scanf("%d %lf",&m,&n);
b[m]=n;
}
for(map<int,double>::iterator aa=a.begin();aa!=a.end();aa++){
for(map<int,double>::iterator bb=b.begin();bb!=b.end();bb++){
int m;
double n;
m=aa->first+bb->first;
n=aa->second*bb->second;
map<int,double>::iterator cc=c.find(m);
if(cc!=c.end()){
cc->second+=n;
}else{
c[m]=n;
}
}
}
int count=0;
for(map<int,double>::iterator cnt=c.begin();cnt!=c.end();cnt++){
if(cnt->second!=0){
count++;
}
}
if(count==0){
printf("0\n");
}else{
printf("%d ",count);
map<int,double>::iterator cc=c.end();
cc--;
for(;cc!=c.begin();cc--){
if(cc->second!=0){
printf("%d %.1lf ",cc->first,cc->second);
}
}
if(cc->second!=0){
printf("%d %.1lf\n",cc->first,cc->second);
}
}
return 0;
}