试了下只有44分
#include<bits/stdc++.h>
using namespace std;
#define down 0.998
const int N=1e4+5;
int n,hs,minn,lp,cnt;
int a[N];
clock_t ap,app;
int js(int i)
{
return (a[i-1]+a[i+1]-2*a[i])*((n-1)*(a[i-1]+a[i+1]-a[i])+(n+1)*a[i]-2*hs);
}
//o(1)计算方差变化量
void th()
{
double T=10000.000;
while(T>1e-9)
{
int p=rand()%(n-2)+2;
int po=js(p);
double de=double(po);
if(po<0)
{
minn=min(minn,lp+po);
int u=a[p];
a[p]=a[p+1]+a[p-1]-a[p];
hs=hs+a[p+1]+a[p-1]-2*u;
lp=lp+po;
}
else
{
if(exp(-de/T)*RAND_MAX>rand())
{
int u=a[p];
a[p]=a[p+1]+a[p-1]-a[p];
hs=hs+a[p+1]+a[p-1]-2*u;
lp=lp+po;
}
T*=down;
}
}
}
int main()
{
srand(time(0));
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]),hs+=a[i];
for(int i=1;i<=n;i++)
lp+=(n*a[i]-hs)*(n*a[i]-hs);
lp/=n;
minn=lp;
int u=0;
while((double)clock()/CLOCKS_PER_SEC<0.9)
u++,th();
cout<<minn;
}