https://www.luogu.com.cn/problem/P2440
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n, k, a[100005], max_a=-1; 4 int check(int kk){ 5 int ret=0; 6 for(int i=0; i<n; i++) 7 ret+=a[i]/kk; 8 return ret; 9 } 10 int main() 11 { 12 cin>>n>>k; 13 for(int i=0; i<n; i++) 14 cin>>a[i], max_a=max(max_a,a[i]); 15 int l=1, r=max_a; //搜索范围是[1,max_a] 16 int ans=0; //初始化假定无解为0 17 while(l<=r){ 18 int mid=(l+r)/2; 19 if(check(mid)>=k){ //如果以mid长度切木头获得的段数>=k,则说明ans偏小 20 ans=mid; 21 l=mid+1; 22 } 23 else 24 r=mid-1; 25 } 26 cout<<ans; 27 return 0; 28 }