二分
*注意精度问题
#include <stdio.h>
#define esp 1e-8
#include <string.h>
#include <algorithm>
using namespace std;
int n,k;
double ss[10001];
int panduan (double mid)
{
int sum = 0;
for (int i = 0;i < n;i++)
{
sum += ss[i]/mid;
if (sum >= k) return 1;
}
return 0;
}
double erfen(double r)
{
double l = 0;
double mid ;
while (r-l>esp)
{
mid = (l + r ) / 2.0;
if (panduan(mid)) l = mid;
else r = mid;
}
if (mid<0.01-esp)
mid =0;
return mid;
}
int main()
{
double sum;
double emmmm;
while (~scanf("%d%d",&n,&k))
{
if (n == 0 &&k == 0) break;
sum = 0;
memset(ss,0,sizeof(double));
for (int i = 0;i < n;i++)
{
scanf("%lf",&ss[i]);
sum += ss[i];
}
emmmm = sum / k;
sort(ss,ss+n);
double lengh = erfen(emmmm);
printf("%.2lf\n",lengh);
}
return 0;
}
********
4 1873
5.03
4.93
2.57
6.21-------0.01
4 1875
5.03
4.93
2.57
6.21----0.00