题目描述
This time, you are supposed to find A+B where A and B are two polynomials(多项式).
输入
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
k
,
a
N
k
K,N_1 ,a_{N_1}, ...,N_k,a_{N_k}
K,N1,aN1,...,Nk,aNk
where K is the number of nonzero terms in the polynomial,
N
i
N_i
Ni and
a
N
i
a_{N_i}
aNi are the exponents and coefficients, respectively. It is given that
K
<
10
K<10
K<10 and
0
<
=
N
i
∈
k
<
=
1000
0<=N_i\in k <=1000
0<=Ni∈k<=1000 respectively.
输出
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.
思路
首先只要理解polynomials为多项式就不难想到,数组i存 x i x^i xi对应的系数,因此只需要记录最大的次方项即可。
代码
#include<iostream>
#include<cstdio>
#include<stdlib.h>
using namespace std;
double a[1010], b[1010], c[1010];
int mmax = 0;
int main()
{
int K;
cin >> K;
for (int i = 0; i < K; i++)
{
int pos;
cin >> pos;
cin >> a[pos];
if (pos > mmax)
{
mmax = pos;
}
}
cin >> K;
for (int i = 0; i < K; i++)
{
int pos;
cin >> pos;
cin >> b[pos];
if (pos > mmax)
{
mmax = pos;
}
}
int num = 0;
for (int i = 0; i <= mmax; i++)
{
c[i] = a[i] + b[i];
if (c[i] != 0)
{
num++;
}
}
printf("%d", num);
for (int i = mmax; i >= 0; i--)
{
if (c[i] != 0)
{
printf(" %d %.1lf", i, c[i]);
}
}
}