poj 1064 Cable master

来源:互联网 发布:桌面隐藏软件下载 编辑:程序博客网 时间:2024/05/17 17:39

思路:二分法,最后再逐一检验下。

 

#include <iostream>#include <cstdio>using namespace std;int length[10005];int main(int argc, char** argv){    int n,k,i;    double tmp;    int left,right,mid,sum;    while (scanf("%d%d",&n,&k)==2)    {        right=-1;        for (i=1;i<=n;i++)        {            scanf("%lf",&tmp);            length[i]=(int)((tmp+0.005)*100);            right=max(length[i],right);        }        left=0;        while (left+1<right)        {            mid=(left+right)>>1;            for (i=1,sum=0;i<=n;i++)                sum+=length[i]/mid;            if (sum<k)                right=mid-1;            else                left=mid;        }        for (left+=1;;left++)        {            for (i=1,sum=0;i<=n;i++)                sum+=length[i]/left;            if (sum<k)                break;        }        left--;        printf("%.2lf\n",(double)left/100.0);    }    return 0;}


 

原创粉丝点击