固定循环次数的浮点数二分
这种方法一般而言获得的精度会更高。
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n,m;
int a[N];
bool check(double c) {
int cnt = 0;
for(int i = 1; i <= n; ++i)
cnt += a[i] / c;
return cnt >= m;
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; ++i)
cin >> a[i];
double l = 0;
double r = 1e9;
for(int k = 1; k <= 50; ++k) {
double mid = (l + r) / 2;
if(check(mid))
l = mid;
else
r = mid;
}
printf("%.2f\n",l);
return 0;
}