1002. A+B for Polynomials (25)
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
难点分析:
1.相加系数为0的情况。
2.避免打印多余的空格。
3.系数要求输出保留一位小数。
代码(以下代码仅负责实现,暂未考虑优化):
#include <iostream> #include "iomanip" #include<map> using namespace std; int main() { map<int, double> poly1; map<int, double> poly2; map<int, double, greater<int>> poly3; //读入map集合 int n = 0; cin >> n; for (; n > 0; n--) { int e = 0; double p = 0; cin >> e >> p; double temp = poly1[e]+p; poly1[e] = temp; } cin >> n; for (; n > 0; n--) { int e = 0; double p = 0; cin >> e >> p; double temp = poly2[e]+p; poly2[e] = temp; } //做加法 map<int, double>::iterator iterator1 = poly1.begin(); map<int, double>::iterator iterator2 = poly2.begin(); while (iterator1 != poly1.end() && iterator2 != poly2.end()) { int poly1E = iterator1->first; double poly1P = iterator1->second; int poly2E = iterator2->first; double poly2P = iterator2->second; if (poly1E < poly2E) { poly3.insert(map<int, double>::value_type(poly1E, poly1P)); iterator1++; } else if (poly1E > poly2E) { poly3.insert(map<int, double>::value_type(poly2E, poly2P)); iterator2++; } else if (poly1E == poly2E) { if (poly1P + poly2P != 0) { poly3.insert(map<int, double>::value_type(poly2E, poly2P + poly1P)); } iterator1++; iterator2++; } } if (iterator1 == poly1.end()) { while (iterator2 != poly2.end()) { poly3.insert(map<int, double>::value_type(iterator2->first, iterator2->second)); iterator2++; } } else if (iterator2 == poly2.end()) { while (iterator1 != poly1.end()) { poly3.insert(map<int, double>::value_type(iterator1->first, iterator1->second)); iterator1++; } } //输出结果 cout << poly3.size(); cout<<setiosflags(ios::fixed); cout.precision(1); for (map<int, double>::iterator iterator3 = poly3.begin(); iterator3 != poly3.end(); iterator3++) { double a = iterator3->second ; cout << " " << iterator3->first << " " << a; } return 0; }