P2678跳石头

    科技2026-01-21  7

    #include <bits/stdc++.h> const int maxn = 500010; using namespace std; int a[maxn]; int l,n,m;//起点到终点的距离,起点和终点之间的岩石数,至多移走的岩石数 bool check(int val) { int cnt = 0,pre = 0;//当前位置,已经移走的石头数目 for(int i = 1;i < n + 1;i++) { if(a[i] - a[pre] < val)cnt++; else pre = i; if(cnt > m)return false; } return cnt <= m; } int main() { int ans; scanf("%d%d%d",&l,&n,&m); for(int i = 1;i <= n;i++) scanf("%d",&a[i]); a[n + 1] = l; int left = 0,right = l; while(left <= right) { int mid = (left + right) / 2; if(check(mid))left = mid + 1,ans = mid; else right = mid - 1; } cout<<ans<<endl; return 0; }
    Processed: 0.017, SQL: 9