# [PAT] A1002 A+B for Polynomials (23分!)

2021/7/21 19:18:41 浏览：

### A1002 A+B for Polynomials

• Input Specification
• Output Specification
• Sample Input
• Sample Output
• Code

This time, you are supposed to find A+B where A and B are two polynomials.

## Input Specification

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 aN2Nk 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 Specification

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 Input

``````2 1 2.4 0 3.2
2 2 1.5 1 0.5
``````

## Sample Output

``````3 2 1.5 1 2.9 0 3.2
``````

## Code

``````#include<bits/stdc++.h>
using namespace std;

int main()
{
long long int expa[1010]={0},expb[1010]={0},sume[1010]={0};
double coea[1010]={0.0},coeb[1010]={0.0},sumc[1010]={0.0};
long long int k1,k2,k3=0,k4=1000,expon,cnt=0;
double coeff;
cin>>k1;
for(int i=0;i<k1;i++)
{
cin>>expon>>coeff;
expa[expon]++;
coea[expon]=coeff;
if(expon>k3)
k3=expon;
if(expon<k4)
k4=expon;
}
cin>>k2;
for(int i=0;i<k2;i++)
{
cin>>expon>>coeff;
if(expon<0)
{
expon = expon;
coeff = coeff;
}
expb[expon]++;
coeb[expon]=coeff;
if(expon>k3)
k3=expon;
if(expon<k4)
k4=expon;
}
for(int i=0;i<k3+1;i++)
{
if(expa[i])
sume[i]++;
if(expb[i])
sume[i]++;
if(sume[i])
sumc[i]=coeb[i]+coea[i];
}
for(int i=k3;i>=0;i--)
if(sume[i] && sumc[i])
cnt++;
if(cnt)
cout<<cnt<<" ";
else
cout<<cnt;
for(int i=k3;i>=0;i--)
{
cout.setf(ios::fixed);
if(sume[i] && sumc[i])
{
cout<<i<<" "<<setprecision(1)<<sumc[i];
if(i != k4)
cout<<" ";
}
}
}
``````