二分搜索
注意题目是的一句话
The number must be written with a centimeter precision, with exactly two digits after a decimal point.
必须精确到小数点后两位,而不是四舍五入到小数点后两位,
printf("%.2f\n")默认是四舍五入
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#include <stdlib.h>
#include <stdio.h>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) x<<1
#define r(x) x<<1|1
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
int n, k;
double demo[11111];
double l, r,mid;
bool is(double x) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += (int)(demo[i] / x);
}
return sum>=k;
}
int main() {
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++) {
scanf("%lf", &demo[i]);
}
l = 0;
r = INF;
for (int i = 0; i < 100; i++) {
mid = (l + r) / 2;
if (is(mid)) l = mid;
else r = mid;
}
printf("%.2f\n",(int(l * 100))/ 100.0);
return 0;
}