1 条题解

  • 0
    @ 2025-10-10 19:30:57

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    int l,n,k;
    int a[100005];
    int L,R; 
    bool check(int dis){//判断mid是否满足条件的函数~~~
        int cnt=0;//记录所用路标的个数
        for(int i=0;i<=n;i++){
            if(a[i+1]-a[i]>dis){
                cnt+=(a[i+1]-a[i])/dis;
                if((a[i+1]-a[i])%dis==0)
                    cnt--;
            }
    
            if(cnt>k) return false;//不满足条件
        }
        return true;//满足条件
    } 
    int main(){
        scanf("%d%d%d",&l,&n,&k);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        L=0;R=10000005;//表示懒得动脑qwq
        a[0]=0;//注意题目的坑点,前后都不能丢
        a[n+1]=l;
        int ans;
        while(L<R){
            int mid=(L+R)/2;
            if(check(mid)) R=mid;
            else L=mid+1;
        }
        cout<<L;
    } 
    
    • 1

    信息

    ID
    830
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者