//hdu1551 二分
/*
主要题意是:给你N条电缆和要切成M条,问你每条
最长是多少?N条电缆长度已知,M条的长度相同。
*/
1 #include<stdio.h> 2 #include<string.h> 3 #define exp 1e-5 // 精度 4 int main() 5 { 6 int n,m,i,j,k,t,num; 7 double a[11111]; 8 double MAX; 9 10 while(~scanf("%d %d",&n,&m)) 11 { 12 MAX = 0; 13 if(n == 0 && m == 0) 14 break; 15 for(i=0;i< n;i ++) 16 { 17 scanf("%lf",&a[i]); 18 MAX += a[i]; 19 } 20 MAX /= m; 21 double mid,l,r; 22 l = 0; 23 r = MAX; 24 while((r-l)>exp) 25 { 26 mid = (l+r)/2; 27 num = 0; 28 for(i = 0;i < n;i ++)//计算当每段长mid时,N条电缆能切几段。 29 { 30 t=int(a[i]/mid); 31 num += t; 32 } 33 if(num >= m) // 段数比M多,即每一段的长度偏小,把mid 赋值给l。 34 l = mid; 35 else 36 r = mid; 37 } 38 printf("%.2lf ",l); 39 } 40 return 0; 41 }