洛谷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 }