一共有n个木头,然后要将他们截成m个相等长度的木头,求能截的最大的木头的长度
- 循环输入这个木头
- 进行二分,在二分模板里面进行判断,定义ans来计数,利用每个木头来除mid,用ans来进行统计这些木头被截成mid长度能被截多少段,如果大于等于m,就使边界往右移,如果,小于就往左,就能找到最大的能截得的木头长度了
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
const int N=1e5+5;
int a[N];
int ans=0;
int find(int l,int r)
{ while(l<=r){
int mid=l+r>>1;
int ans=0;
for(int i=0;i<n;i++){
ans+=a[i]/mid;
}
if(ans>=k){
l=mid+1;
}
else{
r=mid-1;
}
}
return r;
}
int main(){
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int l=1,r=a[n-1];
int x=find(l,r);
cout<<x;
return 0;
}