POJ 1064Cable master(二分查找)

喜你入骨 提交于 2019-12-07 10:37:04

题目链接:http://poj.org/problem?id=1064

【中文题意】有n条绳子,他们的长度分别为Li。如果从它们中切割出K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留到小数点后2位。
【思路分析】二分查找绳子的长度。找到最大的符合条件的。
【AC代码】

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<algorithm>
using namespace std;
#define N 10005

int n,k;
double INF=110005;
double L[N];

bool C(double x)
{
    int num=0;
    for(int i=0;i<n;i++)
    {
        num+=L[i]/x;
    }
    return num>=k;
}

void solve()
{
    double lb=0,ub=INF;
    while(ub-lb>1e-5)
    {
        double mid=(lb+ub)/2.0;
        if(C(mid))lb=mid;
        else ub=mid;
    }
    printf("%.2f\n",floor(ub*100)/100);
}

int main()
{
    while(~scanf("%d%d",&n,&k))
    {
        for(int i=0;i<n;i++)
        {
            scanf("%lf",&L[i]);
        }
        solve();
    }
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!