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
代码:
#include<stdio.h>
#include<string>
#include<queue>
using namespace std;
struct node{
double coef;//系数
int exp;//指数
};
int main(){
int num;
queue<node> p1,p2,sum;
if (scanf("%d", &num) != -1){
for (int i = 0; i < num; i++){
node temp;
if ((scanf("%d", &temp.exp) != -1)){
if (scanf("%lf", &temp.coef) != -1){
p1.push(temp);
//printf("aasa%d,,%d,,,,", temp.exp, temp.coef);
}
}
}
//printf("asadas\n");
}
if (scanf("%d", &num) != -1){
//node p1[num];
for (int i = 0; i < num; i++){
node temp;
if (scanf("%d", &temp.exp) != -1){
if (scanf("%lf", &temp.coef) != -1){
p2.push(temp);
//printf("aasa%d,,%d,,,,", temp.exp, temp.coef);
}
}
}
}
while (p1.empty() == false && p2.empty()==false){
node temp1 = p1.front();
node temp2 = p2.front();
if (temp1.exp > temp2.exp){
p1.pop();
sum.push(temp1);
}
else if (temp1.exp < temp2.exp){
p2.pop();
sum.push(temp2);
}
else{
p1.pop();
p2.pop();
node temp;
temp.exp = temp1.exp;
temp.coef = temp1.coef + temp2.coef;
if (temp.coef != 0){
sum.push(temp);
}
}
}
//printf("111");
while (p1.empty() == false){
node temp = p1.front();
p1.pop();
sum.push(temp);
}
//printf("222");
while (p2.empty() == false){
node temp = p2.front();
p2.pop();
sum.push(temp);
}
printf("%d", (int)sum.size());
while (sum.empty() == false){
node temp = sum.front();
sum.pop();
printf(" %d %.1f", temp.exp, temp.coef);
}
return 0;
}
思路:
输入的多项式是按照指数大小兄大到小输入的,是有序的,因此可以参考归并排序合并两个有序数组的思路将对多项式求和。
同样,若输入的多项式无序,可以先排序后按同样的方法处理。
易错点:
两个多项式求和后的结果若为0,不要将其加入结果多项式中。