Contents
  1. 1. Input Specification:
  2. 2. Output Specification:
  3. 3. Sample Input:
  4. 4. Sample Output:
  5. 5. 题目大意:
  6. 6. 分析:

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

题目大意:

给出两行,分别代表两个多项式,要求合并。每一行第一个数字表示该多项式的项数n,其后n对多项式。每对前一个未知数的指数,后一个为该未知数的系数。合并结果的系数部分精确到小数点后一位。

分析:

题目给出了多项式指数的范围,0~1000,可以用数组dict[1010]记录每一个多项式的系数。遍历dict[1000] ~ dict[0],当其中值不为0的项是符合要求的项,按照要求输出即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
int main(){
int m,n,a,cnt=0;
double b,dict[1010]={0};
scanf("%d",&m);
for (int i=0;i<m;i++){
scanf("%d%lf",&a,&b);
dict[a] += b;
}
scanf("%d",&n);
for (int i=0;i<n;i++){
scanf("%d%lf",&a,&b);
dict[a] += b;
}
for (int i=1000;i>=0;i--)
if (dict[i] != 0.0) cnt++;
printf("%d",cnt);
for (int i=1000;i>=0;i--)
if (dict[i] != 0.0) printf(" %d %.1f",i,dict[i]);
return 0;
}
Contents
  1. 1. Input Specification:
  2. 2. Output Specification:
  3. 3. Sample Input:
  4. 4. Sample Output:
  5. 5. 题目大意:
  6. 6. 分析: