1009 Product of Polynomials (25分)

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 N ​1 ​​ a ​N ​1 ​​ ​​ N ​2 ​​ a ​N ​2 ​​ ​​ … N ​K ​​ a ​N ​K ​​ ​​

where K is the number of nonzero terms in the polynomial, N ​i ​​ and a ​N ​i ​​ ​​ (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10, 0≤N ​K ​​ <⋯<N ​2 ​​ <N ​1 ​​ ≤1000.

Output Specification:
For each test case you should output the product 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 up to 1 decimal place.

Sample Input:

2 1 2.4 0 3.2
2 2 1.5 1 0.5

Sample Output:

3 3 3.6 2 6.0 1 1.6

多项式相乘,相乘且合并同类项可能会有系数为0的项,系数为0的项不输出

#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
    int N,num=0;
    double n,x;
    map<double,double>a;
    map<double,double>b;
    map<double,double>c; 
    cin>>N;
    while(N--){
        cin>>n>>x;
        a[n]=x;
    }
    cin>>N;
    while(N--){
        cin>>n>>x;
        b[n]=x;
    }
    for(auto it1=a.begin();it1!=a.end();it1++){ 
        for(auto it2=b.begin();it2!=b.end();it2++){         
            n=(it1->first)+(it2->first);
            x=(it1->second)*(it2->second);
            c[n]+=x;
        }

    }
    for(auto it1=c.begin();it1!=c.end();it1++)
        if(it1->second!=0.0)num++;
    cout<<num;
    for(auto it1=--c.end();;it1--){
        if(it1->second!=0.0)
        printf(" %.0f %.1f",it1->first,it1->second);
        if(it1==c.begin())break;
    }
    return 0;
}