This time, you are supposed to find A + B A+B A+B where A A A and B B 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
N
1
a
N
1
N
2
a
N
2
.
.
.
N
K
a
N
K
K\quad N_1\quad a_{N_1}\quad N_2\quad a_{N_2}\quad...\quad\quad N_K\quad a_{N_K}
KN1aN1N2aN2...NKaNK
where
K
K
K is the number of nonzero terms in the polynomial,
N
i
N_i
Ni and
a
N
i
(
i
=
1
,
2
,
⋯
,
K
)
a_{N_i} (i=1,2,⋯,K)
aNi(i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that
1
≤
K
≤
10
,
0
≤
N
K
<
⋯
<
N
2
<
N
1
≤
1000
1≤K≤10,0≤N_K<⋯<N_2<N_1≤1000
1≤K≤10,0≤NK<⋯<N2<N1≤1000.
Output Specification:
For each test case you should output the sum of A A A and B B 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
Solution:
// Talk is cheap, show me the code
// Created by Misdirection 2021-08-09 18:50:57
// All rights reserved.
#include <iostream>
#include <vector>
using namespace std;
float d[1010]{0};
int main(){
int num1, num2;
scanf("%d", &num1);
for(int i = 0; i < 2 * num1; i += 2){
int tmp;
float eff;
scanf("%d %f", &tmp, &eff);
d[tmp] += eff;
}
scanf("%d", &num2);
for(int i = 0; i < 2 * num2; i += 2){
int tmp;
float eff;
scanf("%d %f", &tmp, &eff);
d[tmp] += eff;
}
int cnt = 0;
for(int i = 0; i < 1010; ++i){
if(d[i] != 0) cnt++;
}
if(cnt == 0) {
printf("0\n");
return 0;
}
printf("%d ", cnt);
for(int i = 1010; i >= 0 && cnt > 0; --i){
if(d[i] == 0) continue;
printf("%d ", i);
if(cnt == 1) printf("%.1f\n", d[i]);
else printf("%.1f ", d[i]);
cnt--;
}
return 0;
}