社区讨论
CCF爆0,luogu 100
P14635[NOIP2025] 糖果店参与者 7已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @mipybck3
- 此快照首次捕获于
- 2025/12/03 19:56 3 个月前
- 此快照最后确认于
- 2025/12/05 21:15 2 个月前
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int n, m, minid, minsum, minsumx, minsumy;
struct Node
{
int x, y, sum, id;
} c[N];
bool cmp(const Node &A, const Node &B)
{
return A.sum < B.sum;
}
bool cmp1(const Node &A, const Node &B)
{
return A.x < B.x;
}
int check(int x)
{
int mm = m - x * minsum, res = 0;
for (int i = 1; i <= n; i++)
{
if (mm - c[i].x >= 0)
mm -= c[i].x, res++;
}
return res + x * 2;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
freopen("candy.in", "r", stdin);
freopen("candy.out", "w", stdout);
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> c[i].x >> c[i].y;
c[i].sum = c[i].x + c[i].y;
c[i].id = i;
}
sort(c + 1, c + n + 1, cmp);
minid = c[1].id, minsum = c[1].sum, minsumx = c[1].x, minsumy = c[1].y;
sort(c + 1, c + n + 1, cmp1);
int l = 0, r = m / minsum, ans = 0;
while (l <= r)
{
int mid = (l + r) / 2, ac = mid + 1, res1, res2;
if (l != r)
{
res1 = check(mid), res2 = check(ac);
while (res1 == res2 && ac < r)
res2 = check(++ac);
}
else
res1 = res2 = check(mid);
ans = max(ans, max(res1, res2));
if (res1 < res2)
l = mid + 1;
else
r = mid - 1;
}
cout << ans;
}
写得比较神奇,但是感觉没什么问题吧,怎么会爆0呢
回复
共 10 条回复,欢迎继续交流。
正在加载回复...