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

浙公网安备 33010602011771号