POJ1064

来源:互联网 发布:mysql bit类型比较 编辑:程序博客网 时间:2024/06/06 00:59

http://poj.org/problem?id=1064

题意:知道N段电缆的长度,从他们中切割出K条长度相同的电缆,求最大可以切多长,答案保留2位小数。

二分搜索。

#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<cmath>using namespace std;const int maxn=1e5+10;const int INF = 1e9;int n,k;double a[maxn];//判断是否满足条件bool cmp(double x){    int num=0;    for(int i=1;i<=n;i++){        num+=(int)(a[i]/x);    }    return num>=k;}int main(){    scanf("%d%d",&n,&k);    for(int i=1;i<=n;i++){        scanf("%lf",&a[i]);    }    double lb=0,ub=INF;//初始化解的范围    //重复循环,知道解的范围足够小,循环100次,基本上没有什么精度问题了。    for(int i=0;i<100;i++)    {        double mid=(lb+ub)/2;        if(cmp(mid)) lb=mid;        else ub=mid;    }    printf("%.2f",floor(ub*100)/100);//floor函数是向下取整函数}
0 0
原创粉丝点击