1 条题解

  • 1
    @ 2023-7-2 13:45:38
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int l,n,k,a[100001],le,ri,mid,ans;
    bool check(int x)//是否能通过新增<=k的路标使空旷指数为x
    {
        int cnt=0;//新增路标数
        for (int i=2;i<=n;i++)
        {
            if (a[i]-a[i-1]>x)//当前路标与前一路标相差超过空旷指数
            {
                if ((a[i]-a[i-1])%x==0)//能整除
                {
                    cnt+=(a[i]-a[i-1])/x-1;//只需要当前路标与前一路标相差距离/x-1
                }
                else
                {
                    cnt+=(a[i]-a[i-1])/x;//否则需要当前路标与前一路标相差距离/x,再多加一个
                }
            }
        }
        return cnt<=k;
    }
    int main()
    {
        cin>>l>>n>>k;
        for (int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        sort(a+1,a+n+1);//排序
        le=1;
        ri=l;
        while (le<=ri)//二分答案
        {
            mid=(le+ri)/2;
            if (check(mid))
            {
                ans=mid;
                ri=mid-1;
            }
            else
            {
                le=mid+1;
            }
        }
        cout<<ans;
    }
    
    • 1

    信息

    ID
    908
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    77
    已通过
    31
    上传者