社区讨论
问AI才知道贪心错了,求估分 : (
P14635[NOIP2025] 糖果店参与者 6已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @mioejrsc
- 此快照首次捕获于
- 2025/12/02 17:55 3 个月前
- 此快照最后确认于
- 2025/12/04 13:50 3 个月前
第一次参加 NOIP 虽然知道难度超纲好多,当时以为要做出第一题好兴奋,唯独第六个样例是 83 我怎么做都是 82 就没管它,回来跑洛谷自测 100 分真的以为自己出息了 (强省弱市里的蒟蒻孩儿),问了AI才发现贪心策略就不对,突然当头一棒呜呜呜。不知道 CCF 数据强度怎么样……不知道还有没有二三等奖。 ·悲哀·
CPP#include <bits/stdc++.h>
#include <queue>
using namespace std;
typedef long long ll;
int main() {
ll n, m, min_two = LONG_LONG_MAX, cnt = 0;
cin >> n >> m;
vector<pair<ll, ll>> vec(n + 1);
vector<bool> sign(n + 1, false);
for (ll i = 1; i <= n; i++) {
cin >> vec[i].first >> vec[i].second;
min_two = min(min_two, vec[i].first + vec[i].second);
}
for (ll i = 1; i <= n; i++) {
if (vec[i].first * 2 <= min_two) {
m -= vec[i].first;
cnt++;
sign[i] = true;
}
}
cnt += m / min_two * 2;
m %= min_two;
priority_queue<ll, vector<ll>, greater<ll>> pq;
for (ll i = 1; i <= n; i++) {
if (!sign[i] && vec[i].first <= m) {
// m -= vec[i].first;
// cnt++;
pq.push(vec[i].first);
}
if (sign[i] && vec[i].second <= m) {
// m -= vec[i].second;
// cnt++;
pq.push(vec[i].second);
}
}
while (!pq.empty() && m - pq.top() >= 0) {
m -= pq.top();
pq.pop();
cnt++;
}
cout << cnt << endl;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...