10pts WA 求调
查看原帖
10pts WA 求调
546369
HappyCode楼主2024/7/26 11:18
#include<iostream>
using namespace std;
int l,n,k,a[100005],ans=10000001;
bool check(int x){
    int kk=k;
    for(int i=2;i<=n;i++){
        int t=a[i]-a[i-1];
        while(t>x){
            t-=x;
            kk--;
            if(kk<0){
                return false;
            }
        }
    }
    return true;
}
int main(){
    cin>>l>>n>>k>>a[1];
    for(int i=2;i<=n;i++){
        cin>>a[i];
        ans=min(ans,a[i]-a[i-1]);
    }
    int l=1,r=ans;
    while(l<r){
        int mid=(l+r)/2;
        if(check(mid)){
            ans=mid;
            r=mid;
        }else{
            l=mid+1;
        }
    }
    cout<<ans<<endl;
    return 0;
}

思路:二分空旷指数。两个路标之间距离大于空旷指数就插路标,路标数量不够就往大找,够了就往小找。

2024/7/26 11:18
加载中...