poj 1064 Cable master

/*
 *  poj 1064 Cable master

    题目大意:
        给定一系列长度的电缆,需要截取成等长的K份,求所能截取的最大长度值。

    解题思路:
        1、二分法枚举所有可能的长度,求得最大长度值 -- 所谓可能长度,即该长度能够产生多于或等于K份


    数学模型: 
        该题之所以可以采用二分法枚举,在于所能产生的电缆份数随长度的递增而单调非增,即有如下

        f(x)表示长度为x时产生的份数,f(x)随x的变化单调非增。 -- 所有单调模型均可采用二分枚举! 

    注意:
        本题WA的主要原因是精度问题,看discuss有人说输入数据+0.005即可满足AC条件,试了一下果然
        BT测试数据:

        4 2540
        8.02
        7.43
        4.57
        5.39

        =>0.01

        4 2542
        8.02
        7.43
        4.57
        5.39

        =>0.00
        
        另: 解决精度问题,也可以将输入数据乘以100换算成整数进行计算。

        2 2
        1.02
        2.33

        => 1.16 // 并没有说一定要把所有的电缆都用上,哎,这里WA了N次

        另外,POJ上提交的时候采用C++可以AC,但是用G++就会WA,日!
*/

#include 
#include 
#include 

namespace {
    using namespace std;

    const int N_MAX = 10000;
    int cables[N_MAX];

    int n;
    int cut_numbers(int len)
    {
        int count = 0;
        for (int i=0; ir) r=cables[i]; // 这里千万注意,最大可能取值并不是读入的最小
    }

    if (s/K= K)
        {
            l = q + 1;
            len = q;
        }
        else
        {
            r = q - 1;
        }
    }

    printf("%0.2lf\n", len*0.01);
    
    return 0;
}


你可能感兴趣的:(简单题,精度)