交了很多次没调出来,有个点一Wa到底,不开O2只能T60
写的退火
求调
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define delta 0.971
int n,f;
long double dx[100005],dy[100005],ansx,ansy,ans=1e8,tmp;
long double d(double x,double y,double x2,double y2){
return (x-x2)*(x-x2)+(y-y2)*(y-y2);
}
void clac(double x,double y){
tmp=-1;
for(int i=0;i<n;i++){
long double j=d(x,y,dx[i],dy[i]);
j=sqrt(j);
if(j>tmp) tmp=j,f=i;
}
}
void begin(){
long double t=30000;
while(t>1e-18){
clac(ansx,ansy);
ans=min(ans,tmp);
// cout<<tmp<<" "<<ans<<" "<<f<<endl;
ansx+=(dx[f]-ansx)*t/tmp;
ansy+=(dy[f]-ansy)*t/tmp;
t*=delta;
}
}
signed main(){
srand(1e9+7);
cin>>n;
double sum1=0,sum2=0;
for(int i=0;i<n;i++) scanf("%Lf%Lf",&dx[i],&dy[i]),sum1+=dx[i],sum2+=dy[i];
ansx=sum1/n,ansy=sum2/n;
clac(ansx,ansy);
ans=tmp;
while((double)clock()/CLOCKS_PER_SEC<0.5) begin();
// cout<<ans<<endl;
printf("%.11Lf\n%.11Lf %.11Lf",ans,ansx,ansy);
}