题意
有n条绳子,他们的长度分别为Li。如果从他们中切割出k条长度相同的绳子的话,这k条绳子每条最长能有多长?答案保留到小数点后2位
思路
这个题与PIE那个题一样的思路 用二分法来解
#include<iostream>
#include <cstdio>
#include <cmath>
#include<iomanip>
using namespace std;
const int maxn = 10000 + 10;
int INF = 100000000;
int n, k;
double EPS=0.01;
double L[maxn];
bool f(double x)
{
int num = 0;
for (int i = 0; i < n; i++) {
num += (int)(L[i] / x);
}
return num >= k;
}
void g()
{
double lb = 0, ub = INF;
while (ub-lb>EPS)
{
double mid = (lb + ub) / 2;
if (f(mid))
lb = mid;
else
ub = mid;
}
cout << setprecision(2) << setiosflags(ios::fixed) << floor(ub * 100) / 100 << endl;
}
int main()
{
while (cin>>n&&cin>>k&&!(n==0&&k==0)) {
for (int i = 0; i < n; i++) {
cin>>L[i];
}
g();
}
return 0;
}