70求调
查看原帖
70求调
1406896
crafting_table楼主2025/6/16 19:19

WA on #1,#3,#9

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 4050;
struct node{int x,y;} a[N];
int n,row,line,f[N];
int minn(int x,int y){return x<y?x:y;}
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
double dis(node x,node y){return (x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y);}
bool check(double x){
    for(int i = 0;i < N;i++){f[i] = i;}
    for(int i = 1;i <= n;i++){
        for(int j = i+1;j <= n;j++){
            if(dis(a[i],a[j])<=4.0*x*x){
                int t1 = find(i),t2 = find(j);
                if(t1!=t2) f[t1] = t2;
            }
        }
    }
    for(int i = 1;i <= n;i++){
        int t1 = find(i);
        if(a[i].x<=x){
            int t2 = find(3001);
            if(t1!=t2) f[t1] = t2;
        }
        if(a[i].y<=x){
            int t2 = find(3002);
            if(t1!=t2) f[t1] = t2;
        }
        if(a[i].x+x>=row){
            int t2 = find(3003);
            if(t1!=t2) f[t1] = t2;
        }
        if(a[i].y+x>=line){
            int t2 = find(3004);
            if(t1!=t2) f[t1] = t2;
        }
    }
    int t1=find(3001),t2=find(3002),t3=find(3003),t4=find(3004);
    if(t1==t2||t3==t4||t2==t4||t1==t3) return 0;
    else return 1;
}
signed main(){
    scanf("%lld%lld%lld",&n,&row,&line);
    for(int i = 1;i <= n;i++){scanf("%lld%lld",&a[i].x,&a[i].y);}
    double l = 0,r = minn(row,line);
    while(fabs(r-l)>0.00001){
        double mid = (l+r)/2;
        //printf("%.2lf %.2lf %.2lf\n",l,mid,r);
        if(check(mid)){l = mid;}
        else{r = mid;}
    }
    printf("%.2lf",l);
    return 0;
}
2025/6/16 19:19
加载中...