P1297 网线切割(二分答案)

https://www.luogu.org/problem/show?pid=1297#sub
将小数先转化为整数处理,而且最后要/100.0 而不是100

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
int n,k;int l,r;
int a[10009];
int check(int x)
{
    int t=0;
    for(int i=1;i<=n;i++)
    {
        t+=a[i]/x;
    }
    return t;
}
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
    {
        double p;
        scanf("%lf",&p);
        a[i]=p*100;
        r=max(r,a[i]);
    }
    l=1;
    while(l<=r)
    {
        int mid=(l+r)>>1;
        if(check(mid)>=k)
         l=mid+1;
        else r=mid-1;
    }
    double ans;
    ans=r/100.0; 
    printf("%.2lf",ans);
    return 0;
} 
原文地址:https://www.cnblogs.com/dfsac/p/7587909.html