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