题目:
http://acm.hdu.edu.cn/showproblem.php?pid=4004
#include<iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn = 500005;
int dist[maxn];
int m,l,n;
int jump(int s){
if(s*m< l)
return0;
int i = 1,j = 0;
int cont = 0;
while(i <= n+1){
cont++;
if(s< dist[i] -dist[j])
return 0;
while (s>= dist[i] -dist[j]&& i <= n+1)
i++;
j = i - 1;
}
if(cont > m)
return0;
return 1;
}
int main(){
while (~scanf("%d%d%d",&l,&n,&m)) {
for(inti = 1;i <=n;i++)
scanf("%d",dist+i);
dist[n+1] =l;
sort(dist,dist+n+2);
int high =l,low = 0;
while(low<= high){
int mid = (high +low)>>1;
if(jump(mid))
high = mid - 1;
else
low = mid + 1;
}
printf("%d\n",low);
}
return 0 ;
}