题目描述
有 N 条绳子,它们的长度分别为 L_iL
i
。如果从它们中切割出 K 条长度相同的绳子,这 KK 条绳子每条最长能有多长?答案保留到小数点后 2 位(直接舍掉 2 位后的小数)。
输入格式
第一行两个整数 N 和 K,接下来 N 行,描述了每条绳子的长度 L_iL
i
。
输出格式
切割后每条绳子的最大长度。答案与标准答案误差不超过 0.010.01 或者相对误差不超过 1%1% 即可通过。
输入输出样例
输入 #1 复制
4 11
8.02
7.43
4.57
5.39
输出 #1 复制
2.00
说明/提示
对于 100%100% 的数据 0<L_i\leq 100000.00,0<n\leq 10000,0<k\leq 100000<L
i
≤100000.00,0<n≤10000,0<k≤10000
#include <bits/stdc++.h>
#define LL long long
using namespace std;
double a[10010];
bool check(int N, int K, double M){
int cnt = 0;
for(int i = 0; i < N; i++){
cnt += a[i] / M;
}
if(cnt >= K){
return true;
}
else{
return false;
}
}
int main(){
int N, K;
cin >> N >>K;
for(int i = 0; i < N; i++){
cin >> a[i];
}
sort(a, a+N);
double L = 0;
double R = a[N-1];
while(L + 0.000000001 <= R){//注意精度问题
double M = (L + R)/2;
if(check(N, K, M)){
L = M;
}
else{
R = M;
}
}
//小数点两位后的数舍去
int temp = floor(R * 100);
printf("%.2lf\n", temp * 0.01);
return 0;
}