给出n条绳子的长度,要切除k条长度相同的绳子,求着k条绳子的最长长度。
http://poj.org/problem?id=1064
浮点数二分(100次循环可以达到10^(-30)的精度),注意精度。。
记录一下这种方法。。
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
double L[10010];
int n, k;
bool judge(double x){
int res = 0;
for(int i=0; i<n; i++) res += (int)(L[i] / x);//这个地方还是要注意一下,wa了一次。。
return res >= k;
}
int main(){
scanf("%d%d", &n, &k);
for(int i=0; i<n; i++) scanf("%lf", &L[i]);
double l = 0, r = 1.0 * inf;
for(int i=0; i<100; i++){
double m = (l + r) / 2;
if(judge(m)) l = m;
else r = m;
}
printf("%.2f\n", floor(r * 100) / 100);
return 0;
}