提交记录
#include<bits/stdc++.h>
using namespace std;
int n,X,Y,x[3005],y[3005];
bool g[3005];
double D(int i,int j){
return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
bool check(double d){
queue<int>q;
memset(g,0,sizeof(g));
for(int i=1;i<=n;i++)
if(y[i]<d)q.push(i),g[i]=1;
while(!q.empty()){
int u=q.front();q.pop();
if(x[u]<d)return false;
if(Y-y[u]<d)return false;
for(int i=1;i<=n;i++){
if(g[i])continue;
if(D(u,i)>=d*2)continue;
q.push(i);g[i]=1;
}
}
memset(g,0,sizeof(g));
for(int i=1;i<=n;i++)
if(X-x[i]<d)q.push(i),g[i]=1;
while(!q.empty()){
int u=q.front();q.pop();
if(x[u]<d)return false;
if(Y-y[u]<d)return false;
for(int i=1;i<=n;i++){
if(g[i])continue;
if(D(u,i)>=d*2)continue;
q.push(i);g[i]=1;
}
}
return true;
}
int main(){
cin>>n>>X>>Y;
for(int i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
double l=0,r=X+Y,ans;
while(l<=r){
double mid=(l+r)/2;
if(check(mid))ans=mid,l=mid+0.0001;
else r=mid-0.0001;
}
printf("%.2lf",ans);
return 0;
}