社区讨论
90分求助!!WA on 17,18
P14635[NOIP2025] 糖果店参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mijxgzuk
- 此快照首次捕获于
- 2025/11/29 14:46 3 个月前
- 此快照最后确认于
- 2025/11/30 09:40 3 个月前
CPP
#include <cstdio>
#include <algorithm>
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int MAXSZ = 1 << 20;
char ch = '0' - 1, buf[MAXSZ], *p1, *p2;
#define ge() (p1 == p2 && (p2 = buf + fread(p1 = buf, 1, MAXSZ, stdin), p1 == p2) ? EOF : *p1++)
template <typename T_T>
inline void read(T_T &x) {
x = 0;
while (ch < '0' || '9' < ch) ch = ge();
while ('0' <= ch && ch <= '9') {
x = x * 10 + (ch ^ 48);
ch = ge();
}
}
template <typename T_T>
inline void write(T_T x) {
if (x > 9) write(x / 10);
putchar(x % 10 | 48);
}
template <typename T_T>
inline T_T min(T_T a, T_T b) {return a < b ? a : b;}
template <typename T_T>
inline T_T max(T_T a, T_T b) {return a > b ? a : b;}
const int N = 1e5 + 5;
struct Ryan {
ll a, b;
bool operator<(const Ryan &other) const {
if (a != other.a) return a < other.a;
return b < other.b;
}
}item[N], ed[N];
int n;
ll m, maxn;
int main() {
// freopen("Ryan.in", "r", stdin);
// freopen("Ryan.out", "w", stdout);
read(n), read(m);
for (int i = 1; i <= n; i++)
read(item[i].a), read(item[i].b);
std::sort(item + 1, item + n + 1);
ed[n + 1].a = ed[n + 1].b = 2e18;
for (int i = n; i >= 1; i--) {
if (ed[i + 1].a <= item[i].a + item[i].b) {
ed[i] = ed[i + 1];
if (ed[i + 1].a == item[i].a + item[i].b && ed[i + 1].b > item[i].a)
ed[i].b = item[i].a;
}
if (ed[i + 1].a > item[i].a + item[i].b)
ed[i] = {item[i].a + item[i].b, item[i].a};
}
ll sum = 0; item[0].a = 0;
for (int i = 0; i <= n; i++) {
sum += item[i].a;
if (sum > m) continue;
ll cnt = i + 2 * ((m - sum) / ed[i + 1].a);
if ((m - sum) % ed[i + 1].a >= ed[i + 1].b) ++ cnt;
maxn = max(maxn, cnt);
// printf("%lld %lld %lld %lld\n", sum, ed[i + 1].a, ed[i + 1].b, maxn);
}
write(maxn), putchar('\n');
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...