【1002 25 多项式加法】 A+B for Polynomials

传送门

题意

两行数据,其中 \(k\) 表示当前多项式的项数,输入 \(k\) 项,每项包括 \(a_{i}\) 即第 \(i\) 项的系数,\(N_{i}\) 为指数,将两个多项式相加,输出结果的非 \(0\) 项个数,以及按照指数从大到小的各项的指数和系数

数据范围

\(1\leq K\leq 10\)
\(1\leq N_{i}\leq 1000\)

题解

  • 使用自带的哈希表以指数为第一关键字,系数为第二关键字存储
  • 存储的时候相加系数即可,将哈希表中系数不为 \(0\) 的项取出,最后排序输出

Code

#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second

unordered_map<int, double> ump;
int main() {
    int k1; cin >> k1;
    int e; double p;
    for (int i = 0; i < k1; i++) {
        cin >> e >> p;
        ump[e] = p;
    }
    int k2; cin >> k2;
    for (int i = 0; i < k2; i++) {
        cin >> e >> p;
        ump[e] += p;
    }

    vector<pair<int, double>> res;
    for (auto it : ump) {
        if (it.se == 0) continue;
        res.push_back({it.fi, it.se});
    }
    cout << res.size();
    sort(res.begin(), res.end());
    for (int i = res.size() - 1; i >= 0; i--) {
        printf(" %d %.1lf", res[i].fi, res[i].se);
     }
}
posted @ 2021-01-19 23:33  Hyx'  阅读(17)  评论(0)    收藏  举报