hdu 1551(二分)


//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 }
View Code
原文地址:https://www.cnblogs.com/ypacm/p/6068175.html