POJ 1064 Cable master(浮点数二分)

来源:互联网 发布:js array shift 编辑:程序博客网 时间:2024/05/21 07:14

题目链接:http://poj.org/problem?id=1064
题意:有N条电缆,他们的长度分别是Li。如果从它们中切割出K条长度相同的电缆的话,这K条电缆每条最长能有多长?答案保留小数点后2位。
分析:浮点数二分,注意控制精度,用100次循环即可,输出时不能直接输出否则会四舍五入。用cin会超时。
AC代码如下

#include<iostream>#include<cstdio>#include<cmath>using namespace std;const int INF=0x7fffffff;double a[10005];int n,k;//条件:所有的L分别切割后能够分成k个xbool C(double x){    int cnt=0;    for(int i=0;i<n;i++)    {        cnt+=a[i]/x;    }    return cnt>=k;}int main(){    scanf("%d%d",&n,&k);        for(int i=0;i<n;i++)            scanf("%lf",&a[i]);            double lb=0,ub=INF;            double mid=lb+(ub-lb)/2;        for(int i=0;i<100;i++)        {            mid=lb+(ub-lb)/2;            if(C(mid)) lb=mid;            else ub=mid;        }        printf("%.2f\n",floor(ub*100)/100);//不能用%.2f直接输出ub,%.2f对小数点第三位的处理是四舍五入    return 0;}
原创粉丝点击