1 条题解

  • 0
    @ 2025-3-1 9:25:08
    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int MAXN = 50010;
    int L,N,M;
    int D[MAXN];
    
    bool check(int d)
    {
      int cnt = 0;
      int last = 0;
      for(int i = 1;i<=N+1;i++)
      {
        int current = (i == N+1) ? L : D[i];
        if(current - last<d)
        {
          cnt ++;
        }
        else {
          last = current;
        }
        if(cnt>M)
        return false;
      }
      return true;
    }
    
    int main()
    {
      cin>>L>>N>>M;
      for(int i = 1;i<=N;i++)
      {
        cin>>D[i];
      }
      int left = 0,right = L;
      int ans = 0;
      while(right-left>=0)
      {
        int mid = (right-left)/2+left;
        if(check(mid))
        {
          ans = mid;
          left = mid+1;
        }
        else 
        {
          right = mid-1;
        }
      }
      cout << ans << endl;
      return 0;
    }
    
    • 1

    信息

    ID
    6713
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    52
    已通过
    26
    上传者