PAT_A1009
PAT甲级1009.
目录
A1009
题目
样例
输入:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
输出:
3 3 3.6 2 6.0 1 1.6
思路和坑点
使用map<int,double>
记录多项式,存放第一个,第二个式子边读入边处理,直接讲读入的每一项乘上第一个多项式,然后合并同类项到输出结果中。
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(void){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt","r",stdin);
#endif
map<int,double> a,ans;
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){ //输入,使用a存放第一个式子
int e;
double c;
scanf("%d%lf",&e,&c);
a[e]=c;
}
scanf("%d",&n); //读入第二个式子,每次读一项,边读入边处理
for(int i=0;i<n;i++){
int e;
double c;
scanf("%d%lf",&e,&c);
for(auto it=a.begin();it!=a.end();it++){ //把当前项乘入式子a,即指数增加e,系数乘以c,然后并入ans中
ans[it->first+e]+=it->second*c;
if(ans[it->first+e]==0) //系数为0时,剔除
ans.erase(it->first+e);
}
}
printf("%d",ans.size()); //输出结果
for(auto it=ans.rbegin();it!=ans.rend();it++){
printf(" %d %.1f",it->first,it->second);
}
return 0;
}