#include <iostream>
#include <stack>
#include <map>
#include <algorithm>
using namespace std;
typedef struct{
int n,x;
}num;
bool cmp(num a,num b){
if(a.x>b.x)
return 1;
return 0;
}
int main(){
int an[2005],ax[2005],bn[2005],bx[2005];
int n1,n2;
cin>>n1;
for(int i=0;i<n1;i++){
cin>>an[i]>>ax[i];
}
cin>>n2;
for(int i=0;i<n2;i++){
cin>>bn[i]>>bx[i];
}
num res[1000000]={0};
int k=1,t;
map <int,int> MAP;
for(int i=0;i<n1;i++){
for(int j=0;j<n2;j++){
t=ax[i]+bx[j];
if(MAP[t]==0){
res[k].n+=an[i]*bn[j];
res[k].x=t;
MAP[t]=k;
k++;
}
else{
res[MAP[t]].n+=an[i]*bn[j];
}
}
}
if(k==1){
cout<<"0 0"<<endl;
}
else{
sort(begin(res)+1,begin(res)+k+1,cmp);
for(int i=1;i<k;i++){
if(res[i].n==0)
continue;
if(i<k-1)
cout<<res[i].n<<" "<<res[i].x<<" ";
else
cout<<res[i].n<<" "<<res[i].x<<endl;
}
}
int p=0,q=0;
k=0;
while(p<n1&&q<n2){
if(ax[p]>bx[q]){
k++;
if(k==1)
cout<<an[p]<<" "<<ax[p];
else
cout<<" "<<an[p]<<" "<<ax[p];
p++;
}
else if(ax[p]==bx[q]){
if(an[p]+bn[q]!=0){
k++;
if(k==1)
cout<<an[p]+bn[q]<<" "<<ax[p];
else
cout<<" "<<an[p]+bn[q]<<" "<<ax[p];
}
p++;
q++;
}
else if(ax[p]<bx[q]){
k++;
if(k==1)
cout<<bn[q]<<" "<<bx[q];
else
cout<<" "<<bn[q]<<" "<<bx[q];
q++;
}
}
while(p<n1){
k++;
if(k==1)
cout<<an[p]<<" "<<ax[p];
else
cout<<" "<<an[p]<<" "<<ax[p];
p++;
}
while(q<n2){
k++;
if(k==1)
cout<<bn[q]<<" "<<bx[q];
else
cout<<" "<<bn[q]<<" "<<bx[q];
q++;
}
if(k==0){
cout<<"0 0"<<endl;
}
return 0;
}
7-2 一元多项式的乘法与加法运算 (20 分)
最新推荐文章于 2022-07-14 15:29:21 发布