int main() {
int n,k,L[100005],sum;
int l=0,m,r=0;
cin>>n>>k;
for(int i=0;i<n;i++) {cin>>L[i];r=max(r,L[i]);}
while(l<r) {
m=(l+r+1)/2;//为了能让l最后等于r
sum=0;//别忘了重制!
for(int i=0;i<n;i++) sum+=L[i]/m;
if(sum<k) r=m-1;//此二分为找到大于等于目标数的最后一个位置
//注意整个区间相当于从大到小,所以如果正常的话应该是找到小于等于目标数的最后一个
else l=m;
}
cout<<l;
return 0;
}
洛谷P2440 木材加工
最新推荐文章于 2025-04-29 17:03:13 发布