This time, you are supposed to find A+B where A and B are two polynomials.
Input
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, ..., K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10,0 <= NK < ... < N2 < N1 <=1000.
Output
For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.
Sample Input2 1 2.4 0 3.2 2 2 1.5 1 0.5Sample Output
3 2 1.5 1 2.9 0 3.2
{
double expon;
double coeff;
struct Node *next;
}*lnode;
void attach(lnode *s,double e,double c)
{
lnode p;
p=(lnode)malloc(sizeof(struct Node));
p->expon=e;
p->coeff=c;
p->next=NULL;
(*s)->next=p;
*s=p;
}
lnode ReadPoly()
{
lnode p,s;
p=(lnode)malloc(sizeof(struct Node));
p->next=NULL;
s=p;
int n;
double e,c;
cin>>n;
while(n!=0)
{
cin>>e;
cin>>c;
attach(&p,e,c);
n--;
}
p=s;s=s->next;free(p);
return s;
}
lnode addPoly(lnode l1,lnode l2)
{
lnode l,s;
l=(lnode)malloc(sizeof(struct Node));
l->next=NULL;
s=l;
int count=0;
while(l1&&l2)
{
if(l1->expon==l2->expon)
{
if(l1->coeff+l2->coeff!=0)
{
attach(&l,l1->expon,l1->coeff+l2->coeff);
count++;
}
l1=l1->next;l2=l2->next;
}
else
{
if(l1->expon>l2->expon)
{
attach(&l,l1->expon,l1->coeff);
count++;
l1=l1->next;
}
else
{
attach(&l,l2->expon,l2->coeff);
count++;
l2=l2->next;
}
}
}
while(l1)
{
attach(&l,l1->expon,l1->coeff);
count++;
l1=l1->next;
}
while(l2)
{
attach(&l,l2->expon,l2->coeff);
count++;
l2=l2->next;
}
if(count==0)
cout<<'0'<<endl;
else
cout<<count<<' ';
l=s;s=s->next;free(l);
return s;
}
int main()
{
lnode L1,L2,L;
int flag=1;
L1=ReadPoly();
L2=ReadPoly();
L=addPoly(L1,L2);
while(L)
{
if(flag)
flag=0;
else
cout<<' ';
cout<<fixed<<setprecision(0)<<L->expon<<' ';
cout<<fixed<<setprecision(1)<<L->coeff;
L=L->next;
}
return 0;
}