题目链接:http://poj.org/problem?id=1064
题意:N条绳子,长度分别为Li。若从中切割出K条长度相同的绳子,这K条绳子每条最长能有多长。
二分查找,下界为0上界为最大的L,答案不能四舍五入。
用C++可以过,G++WA。。。为什么。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define eps 1e-6
using namespace std;
int n, k;
double L[10010];
int check(double x) {
int cnt = 0;
int i;
for(i = 0; i < n; i++) {
cnt += int(L[i] / x);
}
if(cnt >= k) return 1;
else return 0;
}
int main() {
scanf("%d %d", &n, &k);
int i;
double maxl = 0;
for(i = 0; i < n; i++) {
scanf("%lf", L + i);
maxl = max(maxl, L[i]);
}
double l = 0, r = maxl;
while(r - l > eps) {
double mid = (l + r) / 2;
if(check(mid)) l = mid;
else r = mid;
}
printf("%.2lf\n", floor(r * 100) / 100);
return 0;
}