二分法
C++ 代码
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
typedef long long ll;
int a[100005]; int n,m;
int xz(double len)
{
int ans=0;
for(int i=0;i<n;i++)
{
ans+=a[i]/len;
if(ans>=m) return 1;
}
return 0;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i];
double l=0,r=1e9;
while(r-l>1e-4)//double类型用这个精度更高来判断 r>l
{
double mid=l+(r-l)/2;
if(xz(mid)) l=mid;
else r=mid;
}
printf("%.2f\n",l);
}