样例:8/2+7/2+4/2+5/2=11
还是基础二分答案,上限是长度中的最大值(k>=1)
精度要求高的 l=mid,不要加1什么的
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int m,n;
double a[10010];
int k;
int too(double mid)
{
int ant = 0;
for(int i=0;i<n;i++)
{
ant += (int)(a[i]/mid);
}
if(ant < k)
return 0;
return 1;
}
int main()
{
// freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&k)!=EOF)
{
if( n == 0 && k == 0 )
break;
double temp;
double maxp = -1.0;
double l,mid;
double r ;
for(int i=0;i<n;i++){
scanf("%lf",&a[i]);
maxp = maxp > a[i] ? maxp : a[i];
}
l = 0.000, r = maxp;
while( r - l > 1e-6)
{
mid = r + (l-r)/2;
if(too(mid))
l = mid ;
else
r = mid ;
}
printf("%.2lf\n",l);
}
return 0;
}