这一次,你需要求两个多项式 A 和 B 的乘积(A×B)。
输入规范:
每个输入文件包含一个测试用例。每个测试用例占两行,每行描述一个多项式,格式为: K N1 a N1 N2 aN2 ...... NK aNK 其中 K 为多项式中非零项的个数,Ni和 aNi(i=1,2,⋯ ,Ki=1,2,⋯,K)分别表示幂次和系数。满足 1≤K≤10,0≤NK<⋯<N2<N1≤1000。
输出规范:
对于每个测试用例,输出一行,为 AA 与 BB 的乘积,格式与输入相同。注意行尾不得有多余空格。结果保留 1 位小数。
样例输入:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
样例输出:
3 3 3.6 2 6.0 1 1.6
cpp
#include <iostream>
#include <bits/stdc++.h>
#include <cstring>
#include <iomanip>
using namespace std;
vector<int> v1,v2,v3;
map<int,double> mp,mp2,mp3;
bool cmp(int a,int b){
return a>b;
}
int main(){
int a,b;
cin>>a;
for(int i=0;i<a;++i){
double xs;int mc;cin>>mc>>xs;
mp[mc]=xs;
v1.push_back(mc);
}
cin>>b;
for(int i=0;i<b;++i){
int mc;double xs;
cin>>mc>>xs;
mp2[mc]=xs;
v2.push_back(mc);
}
for(int i=0;i<a;++i){
for(int j=0;j<b;++j){
int M=v1[i]+v2[j];
double X=mp[v1[i]]*mp2[v2[j]];
mp3[M]+=X;
if(find(v3.begin(),v3.end(),M)==v3.end()){
v3.push_back(M);
}
}
}
sort(v3.begin(),v3.end(),cmp);
int cnt=0;
for(int i=0;i<v3.size();++i){
if(mp3[v3[i]]==0)cnt++;
}
cout<<v3.size()-cnt;
for(int i=0;i<v3.size();++i){
if(mp3[v3[i]]!=0)
cout<<" "<<v3[i]<<" "<<fixed<<setprecision(1)<<mp3[v3[i]];
}
return 0;
}