1002. A + B for polynomials (25) Time Limit 400 MS
The memory limit is 32000 kb.
Code length limit: 16000 B
Criterion author Chen, Yue
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 <... <N1 <= 1000.
Output
For each test case you shoshould 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.22 2 1.5 1 0.5
Sample output
3 2 1.5 1 2.9 0 3.2
#include<iostream>#include <vector>#include <algorithm>#include <iomanip>using namespace std;bool compare(pair<int,float> a,pair<int,float> b){return a.first > b.first ;}int main(){int M,N;vector<pair<int,float> > vec;vector<pair<int,float> > vec1;vector<pair<int,float> >::iterator it,it1;float exp=0;float coe=0;cin>>M;while(M--){ cin>>exp>>coe; vec.push_back(make_pair(exp,coe));}cin>>N;while(N--){cin>>exp>>coe;vec.push_back(make_pair(exp,coe));}sort(vec.begin(),vec.end(),compare);for (it=vec.begin();it!=vec.end();it=it1){ for (it1=it+1;it1!=vec.end() && (*it).first == (*it1).first ;it1++) (*it).second += (*it1).second; if ((*it).second !=0){vec1.push_back(*it);} }cout<<vec1.size();for (it=vec1.begin();it!=vec1.end();it++)cout<<" "<<(*it).first<<" "<<fixed<<setprecision(1)<<(*it).second; cout<<endl; // system("pause");return 0;}