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这个题注意两个地方, 第一:最后输出的总项数是针对多项式求和后每一项系数不为0的项。第二:求和后系数为零的项不输出。
#include<iostream> #include<algorithm> #include<iomanip> #include<string> typedef struct number { int z; double x; bool flag; }num; bool cmp(num a, num b) { return a.z>b.z; } int main() { std::ios::sync_with_stdio(false); int n, m; std::cin>>n; num* p = new num [n]; for(int i=0;i<n;++i) { std::cin>>p[i].z>>p[i].x; p[i].flag = false; } std::cin>>m; num* q = new num [m]; for(int i=0;i<m;++i) { std::cin>>q[i].z>>q[i].x; q[i].flag = false; } num t[1001]; int dex=0; for(int i=0;i<n;++i) { for(int j=0;j<m;++j) { if(p[i].z == q[j].z) { t[dex] = p[i]; t[dex].x += q[j].x; q[j].flag = true; p[i].flag = true; } } if(p[i].flag == false) { t[dex] = p[i]; p[i].flag = true; } dex++; } for(int i=0;i<m;++i) { if(q[i].flag == false) { t[dex++] = q[i]; } } std::sort(t, t+dex, cmp); int _dex=0; for(int i=0;i<dex;++i) if(t[i].x!=0) _dex++; std::cout<<_dex; for(int i=0;i<dex;++i) if(t[i].x!=0) i==0?std::cout<<" "<<t[i].z<<" "<<std::fixed<<std::setprecision(1)<<t[i].x:std::cout<<" "<<t[i].z<<" "<<std::fixed<<std::setprecision(1)<<t[i].x; std::cout<<std::endl; return 0; }