二分结束条件:左右边界差小于1e-3时
代码比较简单就不写注释了
#include<iostream>
using namespace std;
const int N=1e5+10;
double a[N];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
double l=0,r=1e9,mid=0;
int cnt;
while(r-l>1e-3)
{
cnt=0;
mid=(l+r)/2;
for(int i=0;i<n;i++)
{
cnt+=(int)(a[i]/mid);
}
if(cnt<m) r=mid;
if(cnt>=m) l=mid;
}
printf("%.2lf",mid);
return 0;
}