PAT甲级1009
#include<iostream>
#include<stdio.h>
using namespace std;
struct po{
public:
int a;
double b;
};
int main(){
int n1,n2;
double s[2001]={0};
po p1[1000],p2[1000];
cin>>n1;
for(int i=0;i<n1;i++){
cin>>p1[i].a;
cin>>p1[i].b;
}
cin>>n2;
for(int i=0;i<n2;i++){
cin>>p2[i].a;
cin>>p2[i].b;
}
for(int i=0;i<n1;i++){
for(int j=0;j<n2;j++){
s[(p1[i].a+p2[j].a)]+=p1[i].b*p2[j].b;
}
}
int n3=0;
for(int i=p1[0].a+p2[0].a;i>=0;i--){
if(s[i]==0){
continue;
}else{
n3++;
}
}
cout<<n3;
for(int i=p1[0].a+p2[0].a;i>=0;i--){
if(s[i]==0){
continue;
}else{
cout<<" "<<i<<" ";
printf("%.1f",s[i]);
}
}
}
注意数组范围要足够大,由于做过甲级1002题,有些坑都避免了,并且在得到最终结果时采取了之前学到的一种方法,如下:
for(int i=0;i<n1;i++){
for(int j=0;j<n2;j++){
s[(p1[i].a+p2[j].a)]+=p1[i].b*p2[j].b;
}
}