zoukankan      html  css  js  c++  java
  • 【NOIp模拟】【二分答案】电缆老板

    背景

    某地区即将举行区域程序设计比赛,竞赛委员会已经成立并决定举行一次最公平的竞赛,他们决定利用星形拓扑结构来连接每个竞赛者的电脑—也即连接这些电脑到一个中心HUB上;为了达到真正的公平竞赛目的,竞赛委员会主任下令要求:每个竞赛电脑连接到中心HUB的电缆必须是一样长的。
    竞赛委员会联系了一个本地的电缆老板,要求老板为他们提供一定量的相同长度的电缆,而且要求电缆长度越长越好。通过调查,电缆老板知道仓库中每根电缆的长度(精确到厘米),而且他可以以厘米的精度剪断电缆,但确不知道他能为竞赛委员会提供的每根电缆的最大长度是多少?
    你的任务就是:编程求出每根电缆的最大可能的长度。

    输入:

    第1行,2个整数N和K,N是仓库中的电缆条数,K是竞赛委员会要求的电缆条数。其中1

    输出:

    仅1行,为提供给竞赛委员的电缆最大长度(精确到小数点两位)

    代码

    简单的二分答案题。

    #include <cstdio>
    #include <algorithm> 
    #include <cmath>
    using namespace std;
    
    int n,k;
    double len[11000],maxlen=0;
    
    double reset(double a){
        return double(int(a*100)/100);
    }
    
    double erfen(double left,double right){
        if(right-left<0.0001) return left;
        double mid=(left+right)/2;
        int cnt=0; bool flag=false;
        for(int i=1;i<=n;i++){
            cnt+=floor(len[i]/mid);
            if(cnt>=k){
                flag=true;
                break;
            }
        }
        if(flag) return erfen(mid,right);
        else return erfen(left,mid);
    }
    
    int main(){
        freopen("cable.in","r",stdin);
        freopen("cable.out","w",stdout);
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++){
            scanf("%lf",&len[i]);
            maxlen+=len[i];
        }
        double ans=erfen(0,maxlen/k);
        printf("%.2lf",ans);
        return 0;
    }

    试试1 3 2.00这组数据呢?
    上面的程序错在哪里?

  • 相关阅读:
    超酷的元素周期表
    TestLink在线Excel用例转换xml
    我也学习JAVA多线程-join
    request.getSession(true/false)的区别
    nginx location配置详细解释
    RestTemplate--解决中文乱码
    扇贝-每日一句
    Hexo博客系列(三)-将Hexo v3.x个人博客发布到GitLab Pages
    C程序的内存分区(节选自黑马训练营day1)
    CodeBlocks更换界面主题界面、汉化及去掉注释及字符串的下划线(汉化包的链接来自本站的BeatificDevin大神)
  • 原文地址:https://www.cnblogs.com/leotan0321/p/6081366.html
Copyright © 2011-2022 走看看