P2440 木材加工

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  } 

 

posted @ 2020-06-29 16:04  TFLSNOI  阅读(271)  评论(0编辑  收藏  举报