题解:P14635 [NOIP2025] 糖果店 / candy

题目传送门

NOIP场外选手
4h成绩(官方数据):100+32+0+20=152
好后悔CSP-S没有注意细节挂分了

solution

显然我们会想到一个很简单的思路,将一种糖果的两个价格捆绑起来,不断地取 \(x_i+y_i\) 最小的那个

但是还会剩下一些钱,考虑买其他糖果的x

只能取x,如果取x和y的话一定没有最小的\((x+y)\)更优

然后将 \(x\) 从小到大排序,再依次枚举要买多少个糖果的 \(x\)

最后时间复杂度 O(nlogn),可以通过此题。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
long long n, m, minn = 2e14, maxn = 0;
long long a[N], b;
int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i] >> b;
		minn = min(minn, a[i] + b);
	}
	sort(a + 1, a + n + 1);
	for (int i = 1; i <= n; i++) {
		a[i] += a[i-1];
	}
	for (int i = 0; i <= n; i++) {
		if (m >= a[i])
			maxn = max(maxn, i + (m - a[i]) / minn * 2);
	}
	cout << maxn;
	return 0;
}
posted @ 2025-11-30 20:49  Rookie青果  阅读(44)  评论(0)    收藏  举报