题解

1 条题解

  • 0
    @ 2019-08-27 23:24:58

    二分答案直接判即可
    注意由于切割精度所以最后答案向下取整,不要四舍五入

    #include<bits/stdc++.h>
    #define eps 0.00001
    using namespace std;
    int n,k,a[100001];
    bool check(double ans){//检测答案是否通过 
        int i,c=0;//c记录答案长度最大切割条数 
        double li;
        for(i=1;i<=n;i++){
            li=(double)a[i];
            c+=(int)(li/ans);
        }
        if(c>=k){//可以切k条则成功 
        return true;
        } 
        return false;
    }
    int main(){
        int i;
        scanf("%d %d",&n,&k);
        for(i=1;i<=n;i++) scanf("%d",a+i);
        double l=0,r=10000000.0,mid;
        while(r-l>eps){
            mid=(l+r)/2;
            if(check(mid)) l=mid+eps;
            else r=mid;
        }
        //除去小数,向下取整到0.01 
        double ans=(int)(l*100);
        ans=(double)ans/100.0;
        printf("%.2lf",ans);
    }
    
  • 1

信息

ID
1002
难度
4
分类
二分查找 点击显示
标签
(无)
递交数
33
已通过
2
通过率
6%
上传者