poj 1064 Cable master(二分搜索)

来源:互联网 发布:写编程到底什么意思 编辑:程序博客网 时间:2024/06/08 01:30

题意:给你N条绳子,并告诉你每条的长度,把这些绳子切割成k条长度相等的绳子,求每条最长为多少。


思路:二分查找最后每条绳子的长度,然后去计算可以切成多少根这样的绳子,然后和k比较,大于等于K,则说明绳子长度还可以增加。小于说明绳子太长了,需要更短一些。







#include <iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>using namespace std;#define N 10005#define INF 1000005#define M 105#define EPS 1e-4double a[N];int main(){    int n,k;    while(~scanf("%d%d",&n,&k))    {        for(int i=0;i<n;i++)        {            scanf("%lf",&a[i]);        }        double mi=0,ma=INF,mid;        for(int i=0;ma-mi>EPS;i++)        {            mid=(mi+ma)/2;            int num=0;            for(int j=0;j<n;j++)               num+=(int)(a[j]/mid);            if(num>=k)                mi=mid;            else                ma=mid;        }        printf("%.2f\n",floor(ma*100)/100);//舍去小数点2位以后的值,比如2.5999,最后为2.59    }    return 0;}


0 0
原创粉丝点击