This time, you are supposed to find A+B where A and B are two polynomials.
Input
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
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 Input2 1 2.4 0 3.2 2 2 1.5 1 0.5Sample Output
3 2 1.5 1 2.9 0 3.2
题目分析:
A+B运算的变形,类似于MergeSort算法。
代码:
#include<stdafx.h>
#include <iostream>
using namespace std;
int main()
{
int k1, k2;
scanf("%d", &k1);
int N1[1005];
float NK1[1005];
int i;
for (i = 0;i<k1;i++)
{
scanf("%d %f", &N1[i], &NK1[i]);
}
scanf("%d", &k2);
int N2[1005];
float NK2[1005];
for (i = 0;i<k2;i++)
{
scanf("%d %f", &N2[i], &NK2[i]);
}
int j;
int k3, N3[2005];
float NK3[2005];
int k = 0;
i = 0;
j = 0;
while (i < k1 && j < k2)
{
if (N1[i] < N2[j])
{
N3[k] = N2[j];
NK3[k] = NK2[j];
k++;
j++;
}
else if (N1[i] == N2[j])
{
float tmp = NK1[i] + NK2[j];
if (tmp != 0)
{
N3[k] = N1[i];
NK3[k] = tmp;
k++;
}
i++;
j++;
}
else
{
N3[k] = N1[i];
NK3[k] = NK1[i];
k++;
i++;
}
}
if (i == k1)
{
while(j < k2)
{
N3[k] = N2[j];
NK3[k] = NK2[j];
k++;
j++;
}
}
if (j == k2)
{
while(i < k1)
{
N3[k] = N1[i];
NK3[k] = NK1[i];
k++;
i++;
}
}
cout << k;
for (i = 0;i<k;i++)
{
printf(" %d %.1f", N3[i], NK3[i]);
//cout << " " << N3[i] << " " << NK3[i];
}
return 0;
}