刘嘉柚 • 3个月前
原来提高组真题也没那么难,这题就是2015年提高组第1题
#include<bits/stdc++.h>
#define N 50005
using namespace std;
int n,m,l,a[N];
bool check(int d){ //判断距离d能移走的石头数是不是小于等于M
int t=0,cnt=0;
for(int i=1;i<=n;i++){
if(a[i]-t<d) cnt++;
else t=a[i];
}
if(l-t<d) cnt++;
return cnt<=m;
}
int main()
{
cin>>l>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int left=1,right=l+1,mid; //二分查找
while(left+1<right){
mid=(left+right)>>1;
if(check(mid)) left=mid;
else right=mid;
}
cout<<left;
return 0;
}
Comments: