题目描述:
有N条绳子,长度分别为Li。如果从他们中切割K条长度相同绳子,这K条绳子每条最长多少?答案保留小数点后两位。
分析:二分答案
#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
double a[10000];
int n, k;
int cnt(double m) {
int res=0;
for (int i = 0; i < n;++i) {
res += (int)(a[i]/m);
}
return res;
}
int main() {
cin >> n >> k;
double max = 0;
for (int i = 0; i < n; ++i) {
cin >> a[i];
max = (max > a[i]) ? max : a[i];
}
double left = 0, right = max;
while(right-left>=0.001){
double mid = (left + right) / 2;
if (cnt(mid) < k) right = mid;
else left = mid;
}
printf("%.2f\n", floor(right * 100) / 100);
}