题目来源:
题目大意:
把n段绳子切成k段x长度的绳子,求x的最大值。
解题思路:
二分法。
绳子总长/k为x的期望,x不会大于这个期望。
AC代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10010
int n, k;
double c[N];
int check(double mid)
{
int i, t;
for (i=0,t=0;i<n;i++)
{
t += c[i]/mid;
}
if (t>=k)
{
return 1;
}
else
{
return 0;
}
}
double apart(double max)
{
double min = 0, mid;
while (max-min>1e-8)
{
mid = (min + max)/2;
if (check(mid))
{
min = mid;
}
else
{
max = mid;
}
}
return min;
}
int main()
{
int i;
double sum;
while (scanf("%d%d",&n,&k) && (n || k))
{
for (i=0,sum=0;i<n;i++)
{
scanf("%lf",&c[i]);
sum += c[i];
}
sum /= k;
printf("%.2f\n",apart(sum));
}
return 0;
}