http://poj.org/problem?id=1064
有N条绳子,他们的长度分别为Li,如果从它们中切割出k条长度相同的绳子的话,这K条绳子每条能有多长?
假定一个解然后判断是否可行。
注意输出,保留2位小数并不进位。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;
int n,k;
double L[100005];
bool ok(double x){
int num=0;
for (int i=0;i<=n;i++){
num+=(int)(L[i]/x);
}
return num>=k;
}
int main(){
cin >> n >> k;
for (int i=0;i<n;i++){
cin >> L[i];
}
double l=0,r=10000005;
while (r-l>1e-5){
double mid=(l+r)/2;
if (ok(mid)) l=mid;
else r=mid;
}
printf("%.2lf",(floor)(r*100)/100);
//保留2位小数并不进位
}