POJ1064 Cable master(二分)

来源:互联网 发布:数据库原理与应用技术 编辑:程序博客网 时间:2024/05/18 03:08

本题用二分搜索可以很容易的求出答案。设条件C(X)为可以得到K条长度为X的绳子,C(x)=(floor(L(i)/x))。X的初始范围为(0,Max(L(i))+1)。

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;double a[10005];int n,k;void solve(double l,double r){    double x;    for(int j=0;j<100;j++)    {        x=(l+r)/2;        int ncount=0;        for(int i=0;i<n;i++)        {            ncount+=(int)(a[i]/x);        }        if(ncount>=k) l=x;        else r=x;    }    printf("%.2f\n",floor(r*100)/100);}int main(){    //freopen("d:\\Test.txt","r",stdin);double Max;cin>>n>>k;for(int i=0;i<n;i++){    scanf("%lf",&a[i]);    Max=max(Max,a[i]);}solve(0,Max+1);return 0;}


0 0
原创粉丝点击