题目描述
有
�
N 根绳子,第
�
i 根绳子长度为
�
�
L
i
,现在需要
�
M 根等长的绳子,你可以对
�
N 根绳子进行任意裁剪(不能拼接),请你帮忙计算出这
�
M 根绳子最长的长度是多少。
输入格式
第一行包含
2
2 个正整数
�
N,
�
M,表示原始绳子的数量和需求绳子的数量。
第二行包含
�
N个整数,其中第
�
i 个整数
�
�
L
i
表示第
�
i 根绳子的长度。
输出格式
输出一个数字,表示裁剪后最长的长度,保留两位小数。
样例
输入数据 1
3 4
3 5 4
输出数据 1
2.50
数据范围
1
≤
�
,
�
≤
100000
1≤N,M≤100000
0
<
�
�
<
1
0
9
0<L
i
<10
9
#include<bits/stdc++.h>
using namespace std;
int a[100000];
int main() {
int n, m,max1=0;
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> a[i];
max1 = max(a[i], max1);
}
double l = 0, r = max1;
while (r - l > 0.0001) {
int tim = 0;
double mid = (l + r) / 2;
for (int i = 0; i < n; i++) {
tim += a[i] / mid;
}
if (tim < m)r = mid;
else if (tim >= m)l = mid;
}
printf("%.2lf", l);
return 0;
}