POJ1064(二分查找)

来源:互联网 发布:阿里云搭建ss 无网 编辑:程序博客网 时间:2024/05/22 10:24

题意:

给出n个木板,求出能割k个木板的最大长度。

思路:

挑战编程有个使用二分查找的方式,能很好的实现
不过要注意的是精度,需要向下取整,又学到一个新的函数,开心。

#include<iostream>#include<cstdio>#include<cmath>using namespace std;const int inf = 0x3f3f3f3f;int n,k;double L[10001];int C(double x){    int num = 0;    for(int i = 0;i < n; i++){        num += (int)(L[i]/x);    }    return num >= k;}int main(){    //freopen("in.txt","r",stdin);    double lu,ru;    lu = 0,ru = inf;    scanf("%d%d",&n,&k);    for(int i = 0;i < n; i++){        scanf("%lf",&L[i]);    }    double mid;    for(int i = 0;i < 1000; i++){        mid = (lu+ru)/2.0;        if(C(mid)){            lu = mid;        }        else            ru = mid;    }    printf("%.2f\n",floor(ru*100)*0.01);    return 0;}
0 0
原创粉丝点击