#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
struct Poly{
int exp;
double coe;
Poly* next;
}*head,*pre;
int main()
{
int k;
scanf("%d",&k);
head=(Poly*)malloc(sizeof(Poly));
head->next=NULL;
pre=head;
double c;
int e;
while(k--){
scanf("%d%lf",&e,&c);
Poly *node=(Poly*)malloc(sizeof(Poly));
node->coe=c;
node->exp=e;
node->next=NULL;
pre->next=node;
pre=node;
}
scanf("%d",&k);
pre=head;
while(k--){
scanf("%d%lf",&e,&c);
while(pre->next!=NULL && pre->next->exp>e){
pre=pre->next;
}
if(pre->next==NULL){
Poly *node=(Poly*)malloc(sizeof(Poly));
node->coe=c;
node->exp=e;
node->next=NULL;
pre->next=node;
pre=node;
}else if(pre->next->exp<e){
Poly *node=(Poly*)malloc(sizeof(Poly));
node->coe=c;
node->exp=e;
node->next=pre->next;
pre->next=node;
pre=node;
}else{
if(pre->next->coe+c==0){
Poly *node=pre->next;
pre->next=node->next;
free(node);
}else{
pre->next->coe+=c;
}
}
}
pre=head->next;
int count=0;
while(pre){
count++;
pre=pre->next;
}
pre=head->next;
printf("%d",count);
if(count!=0) printf(" ");
while(pre){
printf("%d %.1lf",pre->exp,pre->coe);
if(pre->next!=NULL) printf(" ");
pre=pre->next;
}
return 0;
}
这道题其实用数组来写会很简洁,但是好久没用链表了练一练也不错