这道题比较简单,貌似之前做过,但是为什么没有一次性过呢,原因是我把数组设置为1000的了,事实上需要1000+1000的数组才可以。
ps:学习了C++输出double保留一位小数,setiosflags(ios::fixed)<<setprecision(1)
#include<iostream>
#include<cstdio>#include<cmath>
#include <iomanip>
using namespace std;
struct p{
int n;
double a;
}poly1[100],poly2[100];
int main()
{
int k1,k2;
while(cin>>k1)
{
double sum[2003];
int max = 0;
for(int i=0;i<k1;i++)
{
cin>>poly1[i].n;
cin>>poly1[i].a;
}
cin>>k2;
for(int i=0;i<k2;i++)
{
cin>>poly2[i].n;
cin>>poly2[i].a;
}
for(int i=0;i<=2000;i++)
sum[i]=0.0;
for(int i=0;i<k1;i++)
for(int j=0;j<k2;j++)
{
int x=poly1[i].n+poly2[j].n;
double y=poly1[i].a*poly2[j].a;
sum[x]+=y;
}
for(int i=0;i<=2000;i++)
if(fabs(sum[i])>1e-6)
max++;
cout<<max;
for(int i=2000;i>=0;i--)
if(fabs(sum[i])>1e-6)
{
cout<<' '<<i<<' '<<setiosflags(ios::fixed)<<setprecision(1)<<sum[i];
}
cout<<endl;
}
return 0;
}