题解:CF2036B Startup
xingshuyan000 · · 题解
题目传送门 1(洛谷 CF2036B)
题目传送门 2(Codeforces 2036B)
我的博客本文链接,欢迎点赞
题目大意
某人有
题目分析
这是一个比较简单的贪心。
我们可以预先处理出每一种品牌所有的瓶子的总金额,这里可以用一个 unordered_map 来存,把每个
单组数据的时间复杂度为
Code
(码风良好,适宜阅读)
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 50;
struct node{
int b, c;
}a[N];
void solve()
{
int n, k;
cin >> n >> k;
unordered_map<int, int> mp;
for(int i = 1; i <= k; i ++)
{
cin >> a[i].b >> a[i].c;
mp[a[i].b] += a[i].c; //把 b 对应的 c 加到 map 中
}
vector<int> sum;
for(auto &i : mp) sum.push_back(i.second); //把 map 中的 c 添加到 sum 中
sort(sum.rbegin(), sum.rend()); //对 sum 从大到小排序
long long ans = 0;
for(int i = 0; i < min(n, (int)sum.size()); i ++)
{
ans += sum[i]; //累加答案
}
cout << ans << "\n"; //输出
return ;
}
int main()
{
cin.tie(0) -> sync_with_stdio(0);
int T;
cin >> T;
while(T--) solve();
return 0;
}