传送门:洛谷 ADAFRIEN - Ada and Friends | SPOJ ADAFRIEN - Ada and Friends

更佳的阅读体验:SP32944 题解


简要题意:给定 $Q$ 次事件,每次事件包含给某个人买礼物的花费。求与最多 $k$ 个人断交可以省下多少钱。

使用 mapunordered_map 去重,然后把给每个人买礼物要花的钱从大到小排序,取前 $k$ 个值的和即可。

#include <iostream>
#include <unordered_map>
#include <algorithm>
#include <vector>
#include <numeric>
using namespace std;
using ll = long long;

ll n, k, x;
string s;
unordered_map<string, ll> mp;
vector<ll> v;

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cin >> n >> k;
    for (int i = 1; i <= n; ++i) cin >> s >> x, mp[s] += x;
    for (auto p : mp) v.emplace_back(p.second);
    sort(v.begin(), v.end(), greater<>());
    cout << accumulate(v.begin(), v.begin() + k, 0) << '\n';
    return 0;
}
最后修改:2024 年 02 月 28 日
如果觉得我的文章对你有用,请随意赞赏