切割网线

来源:互联网 发布:知乎红色警戒3盟军打法 编辑:程序博客网 时间:2024/04/28 12:55

二分长度
看每根网线能切割出来的数目
比要求的多了,证明找小了,左节点往右移
反之就是找大了
处理方法,读入后*100按整型处理因为要求精确到厘米

#include <cstdio>#include <iostream>#include <algorithm> #include <cstring>#include <math.h> using namespace std;int d[10001];   int n,m;int check(int mid){    int tot=0;    for(int i=1;i<=n;i++)     tot+=d[i]/mid;    return tot;}int main(){    int l=1;    int r=0;    scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++)    {        double x;        scanf("%lf",&x),d[i]=x*100;        r=max(d[i],r);    }     while(l<=r)    {        int mid=(l+r)/2;        if(check(mid)>=m) l=mid+1;        else              r=mid-1;    }    double ans=r/100.00;    printf("%.2lf",ans);}
原创粉丝点击