bin_search()为二分 只需要二分从一到木头最大值即可
check()可以求每一段木头最多可以拿几个x长的木头
如果可以切大于等于所要求的k个数量的木头,返回true,否则返回false
最终输出答案即可
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int n,k,a[N],mx;
bool check(int x){
int cnt = 0;
for(int i=1;i<=n;i++){
cnt += a[i] / x;
}
return cnt >= k;
}
int bin_research(int l,int r){
int ans = 0;
while(l <= r){
int mid = (l+r) / 2;
if(check(mid)){
ans = mid;
l = mid + 1; //还能再长一点?
}
else
r = mid - 1;
}
return ans;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i],mx = max(a[i],a[i-1]);
sort(a+1,a+1+n);
cout<<bin_research(1,mx);
return 0;
}