您的位置:首页 > 其它

7Cable master

2016-04-09 15:33 183 查看
简单题意

给出每个管子的长度,让你确定最长切割长度,把管子按照切割长度切成给定的数量

解题思路形成过程

用二分法在能保证数量的基础上求得最大值

感想

说真的题干略长,读的不是很明白,跟着模糊理解,看了看输入输出数据,测试了一下自己的方法,成立,就这样做了,不过在选切割长度上限的时候一开始选了最短的的长度作为上线,在杭电题库试了一下WA,才想起来其实要是能保证数量的话,短的管子可以舍弃,于是就选了平均长度作为上限。

AC代码

#include<iostream>

#include<stdio.h>

#include<fstream>

using namespace std;

double a[10005];

int main()

{

    //ifstream cin("in.txt");

    freopen("in.txt","r",stdin);

    int n,k;

    double high,low,mid;

    int cnt;

    while(scanf("%d%d",&n,&k)&&(n||k)){

        high=0;low=0;

        for(int i=0;i<n;i++){

            scanf("%lf",&a[i]);

            high+=a[i];

        }

        high/=k;

        while(high-low>1e-8){

            cnt=0;

            mid=(high+low)/2;

            for(int i=0;i<n;i++){

                cnt+=(int)(a[i]/mid);

            }

            if(cnt>=k)low=mid;

            else high=mid;

        }

            printf("%.2lf\n",mid);

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二分算法