PAT 甲级练习 1002
1002 A+B for Polynomials
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 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 <iostream>
#include <map>
#include <iomanip>
using namespace std;
int main() {
bool insertion; // find the insertion point
int K1, K2, expo;
double coef;
map<int, double> result;
cin >> K1;
for(int i=0; i<K1; ++i){
cin >> expo >> coef;
result[expo] = coef;
}
cin >> K2;
for(int i=0; i<K2; ++i){
cin >> expo >> coef;
if(result.find(expo) == result.end()) // not found
result[expo] = coef;
else // found
if(result[expo] + expo == 0)
result.erase(result.find(expo));
else
result[expo] += expo;
}
if(result.empty()) cout << 0 << endl; // no element
else{ // element exist
cout << result.size() << ' ';
int i = 0, lmt = result.size();
for(auto it=result.rbegin(); it!=result.rend(); ++it){
cout << (*it).first << ' ' << setprecision(1) << fixed << (*it).second;
cout << ((++i == lmt) ? '\n':' ');
}
}
return 0;
}
Pay attention that when using map.erase(arg)
, the arg must be an iterator but not a key.
上一篇: 微信公众号生成带参数二维码
下一篇: 架构师必须掌握的七大知识点!