题目
题意
一条l长的路上栽了n个路灯,给出每个路灯的位置,问能覆盖整条路的最小的路灯照射范围。
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,l;
double s[1001]={0};
scanf("%d%d",&n,&l);
for(int i=1; i<=n; i++) {
scanf("%lf",&s[i]);
}
sort(s,s+n+1);
s[n+1]=l;
double tmp,max=-1.0;
for(int i=0; i<=n; i++) {
if(i==0) {//记录最左侧的路灯的最小照射范围
tmp=s[i+1]-s[i];
} else if(i==n) {//若最右侧的路灯最小照射范围大于最左侧的,则更新tmp
double t=s[i+1]-s[i];
tmp=tmp<t?t:tmp;
} else {//找到最大的范围,可以让任意两路灯互相照射到
double p=(s[i+1]-s[i])/2.0;//注意除2.0
if(p>max) {
max=p;
}
}
}
printf("%.10lf\n",tmp<max?max:tmp);//保证最大照射范围能覆盖两头的照射范围
return 0;
}