【POJ】[1064]Cable master

这里写图片描述

对结果进行二分搜索
计算当前的mid可以分多少份
与k进行比较
判断条件也很好写

然而……

这是卡精度的一题
需要注意的是因为题意
所以最后结果不可以四舍五入
需要进行舍弃

而进制转换和double的灵异机制
导致这一题最后的数据处理会很麻烦

这里是因为逼得……
所以用了一种很逗的方式输出……

测试数据:

4 2540
8.02
7.43
4.57
5.39

=>0.01

4 2542
8.02
7.43
4.57
5.39

=>0.00

#include<stdio.h>
double a[10200];
int n,k;
bool judge(double m) {
    int cnt=0;
    for(int i=0; i<n; i++)
        cnt+=a[i]/m;
    if(cnt>=k)
        return true;
    else
        return false;
}
int main() {
    while(scanf("%d %d",&n,&k),n||k) {
        for(int i=0; i<n; i++)
            scanf("%lf",&a[i]);
        double l=0.0,r=10000000.0,res;
        while(r-l>1e-6) {
            double mid=(l+r)/2;
            if(judge(mid)) {
                l=mid;
                res=mid;
            } else
                r=mid;
        }
        __int64 t=res*100.0+0.0001;
        printf("%I64d.%02I64d
",t/100,t%100);
    }
    return 0;
}

题目地址:【POJ】[1064]Cable master

原文地址:https://www.cnblogs.com/BoilTask/p/12569480.html