社区讨论
请问为什么代码跑的结果永远比真实结果大1?求助
P1873[COCI 2011/2012 #5] EKO / 砍树参与者 4已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @m3zqvlaz
- 此快照首次捕获于
- 2024/11/27 18:30 去年
- 此快照最后确认于
- 2025/11/04 13:48 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL N, M;
LL tree[1000010];
bool check(LL x) //x为二分的最大高度
{
LL k = 0, sum = 0; //分别记录砍树的数量和总长度
for (int i = 0; i < N; i++)
{
if (tree[i] > x)
sum += tree[i] - x;
}
if (sum >= M) return true; //锯片的高度太低了
else return false; //锯片的高度太高了
}
LL bs(LL left, LL right)
{
LL mid;
while (left <= right)
{
mid = left + right >> 1;
if (check(mid)) left = mid + 1;
else right = mid - 1;
}
return left;
}
int main()
{
scanf("%lld %lld", &N, &M);
for (int i = 0; i < N; i++) scanf("%lld", &tree[i]);
LL ans = bs(0, 2e9+1);
printf("%lld", ans-1);
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...