#include <bits/stdc++.h>
using namespace std;
int n, m, maxn = -1, d[100010];bool check(double mid) {//判断是否所有和个数满足m
int sum = 0;for (int i = 0; i < n; i++)
sum += d[i] / mid;return sum >= m;
}int main() {
cin >> n >> m;for (int i = 0; i < n; i++) {
cin >> d[i];
maxn = max(maxn, d[i]);
}double l = 0, r = maxn;//二分左值和右值
while (r - l >= 1e-4) {//最终保留两位小数,故r和l之差大于1e-4即可
double mid = (l + r) / 2.0;//二分中点if (check(mid))//判断是否满足>=m
l = mid;//是,说明最大值在当前中值右边
else
r = mid;//否,说明最大值在当前中值左边
}cout << fixed << setprecision(2) << l;
return 0;
}
每日一题剪绳子
最新推荐文章于 2024-07-09 22:37:42 发布