Cable master---poj1064(二分|卡精度)

题目链接:http://poj.org/problem?id=1064

题意:有n条绳子,长度为Li,现在从这n条绳子中切割出K条相等的绳子,问切割出来的这k条绳子的最大长度为多少;

二分判断即可;

但是本题的精度让人恶心;

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<math.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 100550
#define PI 4*atan(1.0)
#define mod 10119
#define met(a, b) memset(a, b, sizeof(a))
typedef long long LL;

int n, K;
double a[N];

bool Judge(double Mid)
{
    int sum = 0;
    for(int i=1; i<=n; i++)
        sum += (int)(a[i]/Mid);
    return sum>=K;
}

int main()
{
    while(scanf("%d %d", &n, &K)!=EOF)
    {
        for(int i=1; i<=n; i++)
            scanf("%lf", &a[i]);

        sort(a+1, a+n+1);

        double L = 0, R = a[n], ans = a[n];

        while(R-L > 1e-6)
        {
            double Mid = (L+R)/2;
            if(Judge(Mid))
                L = Mid;
            else
                R = Mid;
        }
        printf("%.2f
", floor(R*100)/100);///L会错;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5787930.html