1002 A+B for Polynomials (25 分)(高精度)
给定两个多项式 A A A 和 B B B,计算 A + B A+B A+B 的结果。
输入格式
共两行,每行包含一个多项式的信息,格式如下:
K
N
1
a
N
1
N
2
a
N
2
…
N
K
a
N
K
K N_1 a_{N_1} N_2 a_{N_2} … N_K a_{N_K}
KN1aN1N2aN2…NKaNK
其中,
K
K
K 表示多项式中非零项的数量,
N
i
N_i
Ni 和
a
N
i
a_{N_i}
aNi 分别表示其中一个非零项的指数和系数。
输出格式
按照与输入相同的格式,输出 A + B A+B A+B 的结果。
结果中的各项的系数均保留一位小数。
数据范围
K
K
K 为整数,
1
≤
K
≤
10
1≤K≤10
1≤K≤10。
N
i
N_i
Ni 为整数,
0
≤
N
K
<
⋯
<
N
2
<
N
1
≤
1000
0≤N_K<⋯<N_2<N_1≤1000
0≤NK<⋯<N2<N1≤1000。
a
N
i
a_{N_i}
aNi 为浮点数,
−
100
≤
a
N
i
≤
100
−100≤a_{N_i}≤100
−100≤aNi≤100。
输入样例:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
输出样例:
3 2 1.5 1 2.9 0 3.2
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
double s[N];
int main()
{
int t = 2;
while(t -- )
{
int n;
cin >> n;
for(int i = 0 ; i < n ; i ++ )
{
int a;
double b;
cin >> a >> b;
s[a] += b;
}
}
int cnt = 0;
for(int i = 0 ; i < N ; i ++)
if(s[i]) cnt ++;
cout << cnt;
for(int i = N - 1 ; i >= 0 ; i -- )
if(s[i]) printf(" %d %.1f", i, s[i]);
return 0;
}