二分朴素写法,简单易懂
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = 1e5 + 5;
typedef long long ll;
int n;
int m;
double a[maxn];
signed main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) { cin >> a[i]; }
double l = 0, r = 1e9;
double mid = 0;
while (l <= r)
{
mid = (l + r) / 2;
ll temp = 0;
for (int i = 1; i <= n; i++)temp += a[i] / mid;
if (temp >= m)
l = mid+0.001;
else
r = mid-0.001;
}
printf("%.2f", mid);
return 0;
}