分析:
对半径d采用二分搜索,需要注意的是,需要提前对路灯的位置排序。需要对题目注意的是精度问题exp=1e-9.
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const double eE = 1e-9;
int a[maxn];
int n, l;
int check(double u) {
for (int i = 0; i<n; ++i) {
if (!i&&a[i] - u>0) {
return -1;
}
else if (a[i] - a[i - 1]>2 * u) {
return -1;
}
if(i+1==n&&a[i]+u<l){
return -1;
}
}
return -2;
}
double binarySearch(double ll, double h) {
int cnt=0;
while (ll+eE<h&&cnt<200) {
cnt++;
double d = (ll+h)/2;
int x = check(d);
if (x == -1) {//d太小
ll = d;
}
else if (x == -2) {
h = d;
}
}
return ll;
}
int main(void) {
scanf("%d%d", &n, &l);
for (int i = 0; i<n; i++) {
scanf("%d", &a[i]);
}
sort(a, a + n);
printf("%.10f\n", binarySearch(0, l));
}