社区讨论

求条

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 条回复,欢迎继续交流。

正在加载回复...