| 比赛 |
26暑假集训模拟赛3 |
评测结果 |
AWAAAAAWWWWWAWWAWAWWEEEEE |
| 题目名称 |
蔬菜 |
最终得分 |
36 |
| 用户昵称 |
赵飞羽 |
运行时间 |
1.152 s |
| 代码语言 |
C++ |
内存使用 |
5.08 MiB |
| 提交时间 |
2026-07-06 10:49:51 |
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 100010;
int n, m, k, p, ans[N];
struct node{
int a, s, c, x;
} v[N], s[N];
bool cmp(node x, node y) {
return x.a > y.a;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
freopen("vegetables.in", "r", stdin);
freopen("vegetables.out", "w", stdout);
cin >> n >> m >> k;
for (int i = 1; i <= n; i++) cin >> v[i].a >> v[i].s >> v[i].c >> v[i].x;
for (int i = 1; i <= n; i++) v[n+i] = {v[i].a + v[i].s, 0, 1, v[i].x}, v[i].c--;
n *= 2;
sort(v+1, v+1+n, cmp);
for (int i = 1; i <= n; i++) s[i] = {s[i-1].a + v[i].a * v[i].c, 0, s[i-1].c + v[i].c, 0};
for (int i = 1; i < N; i++) {
int l = 1, r = n;
while (l < r) {
int mid = (l + r) >> 1;
if (s[mid].c > i * m) r = mid - 1;
if (s[mid].c <= i * m) l = mid;
if (l + 1 == r) break;
}
if (s[r].c > i * m) r = l;
ans[i] += s[r].a;
ans[i] += v[r+1].a * (i * m - s[r].c);
}
for (int i = 1; i <= k; i++) {
cin >> p;
cout << ans[p] << "\n";
}
return 0;
}