#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
const int M = 101000;
double a[M];
int n,k;
bool Check(int x) //判断该解是否可行
{
int num=0;
for(int i=0;i<n;i++)
{
num+=a[i]/x;
}
return num>=k;
}
int main()
{
long long sum=0;
long long l=1,r=0;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i];
a[i]=(a[i]+0.005)*100;//四舍五入
sum+=a[i];
if(a[i]>=r) r=a[i];
}
int pos;
if(sum/k<r) r=sum/k;
while(l<=r) // 二分求出满足Check(pos)的最大pos
{
int mid=(l+r)/2; // l从1取 mid不会为0
if(Check(mid))
{
l=mid+1;
pos=mid;
}
else
{
r=mid-1;
}
}
printf("%.2lf\n",pos*0.01);
return 0;
}
poj 1064 二分求最值(水)
最新推荐文章于 2022-09-02 19:05:00 发布