二分答案+贪心.
这个贪心好像挺显然,不证了…
AC code:
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=50010;
int l,n,m;
int a[N];
bool check(int lim){
int cnt=0;
int t[N];
for(int i=1;i<=n;i++) t[i]=a[i];
for(int i=2;i<=n;i++){
if(t[i]-t[i-1]<lim){
cnt++;
t[i]=t[i-1];
}
}
return cnt<=m;
}
int main(){
scanf("%d%d%d",&l,&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
a[n+1]=0;a[n+2]=l;n+=2;
sort(a+1,a+n+1);
int L=0,R=1<<29;
while(L+1!=R){
int M=(L+R)>>1;
if(check(M)) L=M;
else R=M;
}
printf("%d\n",L);
return 0;
}