样例都不过,怎么会是捏
#include<bits/stdc++.h>
using namespace std;
int n;
double a[14][14];
double ans[14],dgl;
double cnt[14],np[14];
double res[14],res1,res2,op=1e18,maxx=-1e18,minn=1e18;
double dt;
double rand(double l,double r)
{
return (double)rand()/RAND_MAX*(r-l)+l;
}
void fc()
{
res2=0;
for(int i=1;i<=n;i++)
res2+=abs(res1-res[i]);
dgl=min(dgl,res2);
}
void SA()
{
dgl=11451400;
for(int i=1;i<=n;i++)
cnt[i]=rand(0,40000);
for(double t=20000;t>1e-5;t*=0.99)
{
for(int i=1;i<=n;i++)
np[i]=rand(cnt[i]-t,cnt[i]+t);
double d=0;
for(int i=1;i<=n+1;i++)
{
double js=0;
for(int j=1;j<=n;j++)
js+=(np[j]-a[i][j])*(np[j]-a[i][j]);
js=sqrt(js);
d+=js;
res[i]=js;
}
res1=d/n;
fc();
d=res2;
double dd=0;
for(int i=1;i<=n+1;i++)
{
double js=0;
for(int j=1;j<=n;j++)
js+=(cnt[j]-a[i][j])*(cnt[j]-a[i][j]);
js=sqrt(js);
dd+=js;
res[i]=js;
}
res1=dd/n;
fc();
dd=res2;
dt=d-dd;
//cout<<dt<<endl;
if(exp(-dt/t)>rand(0,1))
{
for(int i=1;i<=n;i++)
cnt[i]=np[i];
}
}
}
int main()
{
srand((double)time(0));
cin>>n;
for(int i=1;i<=n+1;i++)
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
a[i][j]+=20000;
}
for(int u=1;u<=1000;u++)
{
SA();
//cout<<dgl<<' ';
if(op>dgl)
{
op=dgl;
for(int i=1;i<=n;i++)
ans[i]=cnt[i];
}
}
for(int i=1;i<=n;i++)
printf("%.3lf ",ans[i]-20000);
return 0;
}