传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1337
Code:
#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
const double eps=1e-8;
double r,rx,ry,x,y;
double p[maxn][2];
int n;
double rnd(){
return (double)rand()/RAND_MAX;
}
double sqr(double x){
return x*x;
}
double dist(double x,double y){
double ans=0;
for(int i=1;i<=n;i++)
ans=max(ans,sqrt(sqr(x-p[i][0])+sqr(y-p[i][1])));
return ans;
}
int dcmp(double x){
if(fabs(x)<eps)return 0;
return x>0?1:-1;
}
int main(){
srand(33323);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lf%lf",&p[i][0],&p[i][1]);
x=p[1][0];y=p[1][1];
r=99999999;double ans=dist(x,y);
while(r>eps){
int m=50;
while(m--){
rx=(rnd()*2-1)*r;
ry=sqrt(sqr(r)-sqr(rx))*(rnd()*4-1);
double res=dist(x+rx,y+ry);
if(dcmp(res-ans)<0){
ans=res;
x+=rx;y+=ry;
}
}r=r/1.5;
}printf("%.3lf\n",ans);
return 0;
}