70分求调
查看原帖
70分求调
689584
zhangjinfeng楼主2024/9/26 19:48

提交记录

#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;
}
2024/9/26 19:48
加载中...