POJ 1064 Cable master

wa多次长知识!
四舍五入惨痛的教训!
但是G++过不了。。
当然,可以去掉EOF。。我自做多情了。。

#include<stdio.h>
double cable[10010];
int main()
{
    int n,k;
    while(scanf("%d%d",&n,&k)!=EOF)
    {
    int i;
    double max1=0;
    for(i=1;i<=n;i++)
    {
        scanf("%lf",&cable[i]);
        if(cable[i]>max1)
            max1=cable[i];
    }
    double left=0;
    double right=max1;
    double mid;
    double ans=0;
    while(right-left>0.001)//这题不卡精度//
    {
        int count1=0;
        mid=(left+right)/2;
        for(i=1;i<=n;i++)
        {
            count1=count1+(int)(cable[i]/mid);//同样要防止5入。。
        }
        if(count1>=k)
        {
            ans=mid;//个人认为count有时候即使在最后都不会==k,但是count>k的时候出现了,mid此时一定趋近答案//
            left=mid;
        }
        else
        {
            right=mid;
        }
    }
    if(ans==0)
        printf("0.00\n");
    else
        {
            if((int)(right*1000)%10>=5)
                ans=ans-0.005;//防止5入让答案变大不真实,这点很重要。。是从discuss里面看来的,再次感谢那些大神们。4舍倒是无所谓的//
            printf("%.2lf\n",ans);
        }
    }
    return 0;
}

你可能感兴趣的:(poj,二分-精度)