题解
【提高】跳石头
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; long long l,n,m; int a[50005]; bool f(int x){ int last=0; int s=0;//要移走的数量 for(int i=1;i<=n;i++){ if(a[i]-last<x){//能移走 s++;//移走数量+1 }else{ last=a[i];//更新上一个的位置 } } if(l-last<x){//最后一段 s++; } if(s<=m){//搬走的数量符合要求 return true; }else{ return false; } } int main(){ cin>>l>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; } int z=1,y=l; while(z<=y){ int mid=z+(y-z)/2; if(f(mid)==true){//符合要求 z=mid+1;//扩大距离 }else{ y=mid-1;//缩小距离 } } cout<<z-1; return 0; }
- 1