社区讨论
求条
P14635[NOIP2025] 糖果店参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mimizyqf
- 此快照首次捕获于
- 2025/12/01 10:24 3 个月前
- 此快照最后确认于
- 2025/12/03 18:00 3 个月前
(实际上考场上还有几个地方写错了,但是改完还是只有 80pts)
CPP#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node {
int p, q, m;
bool operator < (const node& y) const {
return (p + q) * y.m < (y.p + y.q) * m;
}
} x[300005];
struct pp {
int x, id;
bool operator < (const pp& y) const {
return x < y.x;
}
}; priority_queue<pp> pq;
signed main() {
// freopen("candy6.in", "r", stdin);
int n, m; cin >> n >> m;
for(int i = 1;i <= n;i++)
cin >> x[i].p >> x[i].q, x[i].m = 2,
x[n + i].p = x[i].p, x[n + i].m = 1;
sort(x + 1, x + 2 * n + 1); int ans = 0;
for(int i = 1;i <= 2 * n;i++) {
// cout << x[i].p << " " << x[i].q << " " << x[i].m << endl;
if(x[i].m == 1) {
if(m >= x[i].p) m -= x[i].p, ans++, pq.push({x[i].p, -1});
} else {
if(m >= (x[i].p + x[i].q)) {
ans += m / (x[i].p + x[i].q) * 2, m %= (x[i].p + x[i].q);
} while(!pq.empty()) {
pp u = pq.top(); pq.pop();
int need = x[i].p + x[i].q - m;
if(u.x < need) break; ans++;
}
}
} cout << ans << endl;
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...