码迷,mamicode.com
首页 > 其他好文 > 详细

poj 1064 Cable master ,二分 精度!!!

时间:2014-11-11 16:10:57      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   sp   for   div   on   art   bs   

给出n根绳子,求把它们分割成K条等长的绳子的最大长度是多少?


二分

用 for(int i=0; i<100; ++i) 取代   while(r-l>eps) 

循环100次精度能达到1e-30,基本上能一般题目的精度要求。

而 浮点数二分区间的话easy产生精度缺失导致死循环。



#include<cstdio>

double L[10000 + 10];
int n, k;

int ok(double x) {
    int cnt = 0;
    for(int i=0; i<n; ++i) {
        cnt += L[i]*1.0/x;
    }
    return cnt>=k;
}
int main() {
    while(~scanf("%d%d", &n, &k)) {
        double  Max = 0;
        for(int i=0; i<n; ++i) {
            scanf("%lf", &L[i]);
            if(Max<L[i]) Max = L[i];
        }
        double l = 0, r = Max;
        for(int i=0; i<100; ++i) {
            double mid =(l+r)/2;
            if( ok(mid) ) l = mid;
            else r = mid;
        }
        printf("%.2f\n", int(l*100)/100.0);
    }
    return 0;
}


poj 1064 Cable master ,二分 精度!!!

标签:style   io   ar   sp   for   div   on   art   bs   

原文地址:http://www.cnblogs.com/lcchuguo/p/4089590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!