https://codeforces.com/problemset/problem/492/B
贪心
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
double a[N];
int n,m;
int main(void)
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
double len=max(a[1]-0,m-a[n]);
for(int i=2;i<=n;i++)
{
double temp=a[i]-a[i-1];
temp/=2;
len=max(len,temp);
}
printf("%.10lf",len);
return 0;
}
二分
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1005];
bool check(double mid)
{
vector<pair<double,double>>ve;
for(int i=1;i<=n;i++) ve.push_back({a[i]-mid,a[i]+mid});
double a=0;
for(int i=0;i<ve.size();i++)
{
double l=ve[i].first,r=ve[i].second;
if(l<=a) a=r;
}
if(a<m) return false;
return true;
}
int main(void)
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
double l=0,r=m;
while(r-l>1e-6)
{
double mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid;
}
printf("%.5lf",l);
cout<<"00000";
return 0;
}