http://codeforces.com/problemset/problem/492/B
n个路灯,街道长l,给出n个路灯的坐标,求最小半径d。
细节较多
①只有一盏路灯时,
②多盏路灯时,第一盏和第二盏要特判。
③由于题目有精度要求,二分要多进行几次。
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int a[1005];
double l;
bool ok(double x){
if (n==1){
if (a[0]+x>=l&&a[0]-x<=0) return true;
return false;
}
for (int i=0;i<n;i++){
if (i==0){
if (a[i]-x>0) return false;
if (a[i]+2*x<a[i+1]) return false;
}
else
if (i==n-1){
if (a[i]+x<l) return false;
}
else{
if (a[i]+2*x<a[i+1]) return false;
}
}
return true;
}
int main(){
cin >> n >> l;
for (int i=0;i<n;i++){
cin >> a[i];
}
sort(a,a+n);
double l=0,r=1000000000;
for (int i=0;i<100;i++){
double mid=(l+r)/2;
if (ok(mid)){
r=mid;
}
else{
l=mid;
}
}
printf("%.10lf\n",l);
}