POJ 1064Cable master(二分查找)

来源:互联网 发布:苹果版戒色软件 编辑:程序博客网 时间:2024/06/05 06:01

题目链接: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 10005int 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;}
0 0
原创粉丝点击