1 条题解

  • 0
    @ 2023-6-27 9:27:14

    简单二分。

    #include <bits/stdc++.h>
    using namespace std;
    int n,m,maxLen,l=1,r;
    int a[101];
    bool check(int x){
        int cnt=0;
        for (int i=1;i<=n;i++){//统计在每段长x的情况下最多切成几段
            cnt+=a[i]/x;
        }
        return cnt>=m;
    }
    int main(){
        cin>>n;
        for (int i=1;i<=n;i++){
            cin>>a[i];
            maxLen=max(maxLen,a[i]);
        }
        cin>>m;
        if (maxLen<m){//如果最大长度小于段数,说明无法切割
            cout<<"Failed";
            return 0;
        }
        r=maxLen;
        while (l<=r){
            int mid=(l+r)>>1;
            if (check(mid)){
                l=mid+1;
            }else{
                r=mid-1;
            }
        }
        cout<<r;
        return 0;
    }
    
    • 1

    信息

    ID
    410
    时间
    1000ms
    内存
    16MiB
    难度
    5
    标签
    递交数
    217
    已通过
    77
    上传者