洛谷P2440 木材加工 二分答案

洛谷P2440 木材加工
二分答案

题意: 将 n 块木材加工 成 k 块 木板,使他们的长度一致 求这些木板最长
可以达到的长度


题解 1、二分答案,既可以达到的最大长度
2、然后贪心验证,O(n) 验证 验证 可以切几块木板

 

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std ; 
 5 
 6 const int maxn = 100011 ; 
 7 int n,k,l,r,mid,sum ; 
 8 int a[ maxn ] ; 
 9 
10 inline bool check(int mid) 
11 {
12     int sum = 0 ; 
13     for(int i=1;i<=n;i++) 
14         sum = sum + a[ i ] / mid ; 
15     return sum >= k ;  
16 }
17 
18 int main() 
19 {
20     scanf("%d%d",&n,&k ) ; 
21     for(int i=1;i<=n;i++) 
22         scanf("%d",&a[ i ] ),sum+=a[ i ] ; 
23     if( sum < k ) 
24     {
25         printf("0\n") ; 
26         return 0 ; 
27     }
28     
29     
30     l = 1 ;  r = 1e8 ; 
31     while( l < r ) 
32     {
33         mid = ( l+r+1 )>>1 ;  //  这时为了防止 二分时死循环  因为  l  
34                             //一直不变  就会死循环 
35         if( check(mid) ) 
36             l = mid ; 
37         else 
38             r = mid - 1 ; 
39     }
40     
41     
42     printf("%d\n",l) ;
43     return 0 ; 
44 }

 

posted @ 2017-06-02 13:11  third2333  阅读(269)  评论(0编辑  收藏  举报