题解#1
2026-09-09 22:43:12
发布于:湖南
11阅读
0回复
0点赞
这是一道排序+模拟题。核心是按降序,降序,编号升序排序,前筐按计价,其余按计价。
#include <bits/stdc++.h>
using namespace std;
struct Basket {
long long s, z, c;
int idx;
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
long long p1, p2;
cin >> n >> m >> p1 >> p2;
vector<Basket> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i].s >> a[i].z >> a[i].c;
a[i].idx = i;
}
sort(a.begin(), a.end(), [](const Basket& x, const Basket& y) {
long long sx = x.s + x.z, sy = y.s + y.z;
if (sx != sy) return sx > sy;
if (x.s != y.s) return x.s > y.s;
return x.idx < y.idx;
});
long long ans = 0;
for (int i = 0; i < n; i++) {
ans += a[i].c * (i < m ? p1 : p2);
}
cout << ans << "\n";
return 0;
}
注意点:
排序键是,两者最大都是,和最大,勉强够但建议用更稳妥。
最大,最大,苹果总数最多,再乘单价,结果会爆,必须用。
链接描述
这里空空如也





有帮助,赞一个