二分的本质是寻找边界
2026-05-21 16:16:09
发布于:日本
0阅读
0回复
0点赞
有用的话可以点赞
#include<bits/stdc++.h>
using namespace std;
int n,k;
int a[100005];
int maxx;
//检查长度 d 是否可行
bool check(int d){
int cnt = 0;
//统计总共能切出多少段
for(int i=1;i<=n;i++){
cnt += a[i] / d;
}
//是否至少能切出 k 段
return cnt >= k;
}
int main(){
cin>>n>>k;
//输入木头长度
for(int i=1;i<=n;i++){
cin>>a[i];
//记录最长木头
maxx = max(maxx,a[i]);
}
//二分答案
int l = 1;
int r = maxx;
//TTTTTT T FFFF 最后一个T是我们要找的
while(l <= r){
int mid = (l+r)/2;
//mid 合法,尝试更长
if(check(mid)){
l = mid + 1;
}
//mid 不合法,缩小长度
else{
r = mid - 1;
}
}
cout<<r;
}
这里空空如也

有帮助,赞一个