传送门:洛谷 ADAFRIEN - Ada and Friends | SPOJ ADAFRIEN - Ada and Friends
更佳的阅读体验:SP32944 题解
简要题意:给定 $Q$ 次事件,每次事件包含给某个人买礼物的花费。求与最多 $k$ 个人断交可以省下多少钱。
使用 map
或 unordered_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;
}