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;
}