P2855 [USACO06DEC]河跳房子River Hopscotch
二分+贪心
每次二分最小长度,蓝后检查需要去掉的石子数是否超过限制。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 50010
int n,m,L,a[N];
bool check(int lim){
int k=;
for(int i=,j=;i<=n;++i){
if(a[i]-a[j]<lim) ++k;
else j=i;
}return k<=m;
}
int main(){
scanf("%d%d%d",&L,&n,&m); a[++n]=L;
for(int i=;i<n;++i) scanf("%d",&a[i]);
sort(a+,a+n+);
int l=,r=L;
while(l<r){
int mid=l+((r-l)>>);
if(check(mid)) l=mid+;
else r=mid;
}printf("%d",check(l)?l:l-);
return ;
}