传送门

愉快的模板题

1337也是

#include <bits/stdc++.h>
#define MAXN 100010
using namespace std;

const double eps=1e-6;

struct vec{
    double x,y;
    vec(double _x=0,double _y=0):x(_x),y(_y){}
    friend vec operator*(vec x,double y){ return vec(x.x*y,x.y*y); }
    friend vec operator+(vec x,vec y){ return vec(x.x+y.x,x.y+y.y); }
    friend vec operator-(vec x,vec y){ return vec(x.x-y.x,x.y-y.y); }
    friend double dot(vec x,vec y){ return x.x*y.x+x.y*y.y; }
    friend double cross(vec x,vec y){ return x.x*y.y-x.y*y.x; }
    friend double dis(vec x,vec y){ return sqrt(dot(y-x,y-x)); }
}a[MAXN];

int n;

vec get_inter(vec s1,vec d1,vec s2,vec d2){
    double det=cross(d1,d2);
    vec t(d2.y/det,-d2.x/det);
    double x=dot(s2-s1,t);
    return s1+d1*x;
}

vec get_center(vec a,vec b,vec c,double &r){
    vec d=a+(b-a)*.5,d1((b-a).y,-(b-a).x);
    vec e=b+(c-b)*.5,e1((c-b).y,-(c-b).x);
    vec res=get_inter(d,d1,e,e1);
    r=dis(res,a);
    return res;
}

vec gao3(int x,int y,double &r){
    vec c=a[x]+(a[y]-a[x])*.5;
    r=dis(a[x],a[y])/2;
    for(int i=1;i<x;i++){
        if(dis(c,a[i])<r+eps) continue;
        c=get_center(a[i],a[x],a[y],r);
    }
    return c;
}

vec gao2(int x,double &r){
    vec c=a[x]; r=0;
    for(int i=1;i<x;i++){
        if(dis(c,a[i])<r+eps) continue;
        c=gao3(i,x,r);
    }
    return c;
}

vec gao1(double &r){
    vec c=a[1]; r=0;
    for(int i=2;i<=n;i++){
        if(dis(c,a[i])<r+eps) continue;
        c=gao2(i,r);
    }
    return c;
}

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);
    random_shuffle(a+1,a+n+1);
    double r;
    vec c=gao1(r);
    printf("%.10lf\n%.10lf %.10lf\n",r,c.x,c.y);
}