【洛谷】P1873 [COCI 2011/2012 #5] EKO / 砍树 (二分)
题目描述见:P1873
思路比较明确qwq因为答案显然满足单调性:当x超过某个数一定是错的(收集的木材大于m),而小于x一定是对的,并且x是从0一直递增。故我们只需二分法找到x。
直接看代码吧qwq精髓是check函数直接模拟题目要求ww
#include <iostream>
using namespace std;
#define MAXN 1000010
typedef long long LL; //之后少打字ww
LL a[MAXN], n, m;
bool check(int h) { //砍树高度为H时是否能得到大于m的木材
LL tol = 0;
for (int i = 1; i <= n; i++)
if (a[i] > h)
tol += a[i] - h;
return tol >= m; //直接模拟过程,这里相当于return (tol>=m)?true:false;
}
int main() {
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%lld", &a[i]);
int l = 0, r = 1e9, ans, mid;
while (l <= r) {
if (check(mid = l + r >> 1))
ans = mid, l = mid + 1; //满足条件,继续往右边搜索,直到最后的临界点mid
else
r = mid - 1;
}
//ans = l-1,有些题解这么写是因为即使mid满足,l也会+1,最后输出答案右侧
printf("%d", ans);
return 0;
}
一些其他有趣的答案
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!