#include <iostream>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <unistd.h>
#include <algorithm>
using namespace std;
inline int read()
{
int x = 0, f = 1; char ch = getchar();
while(ch < '0' || ch > '9')
{ if(ch == '-') f = -1; ch = getchar(); }
while(ch >= '0' && ch <= '9')
{ x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); }
return x * f;
}
typedef long long ll;
const int N = 10005;
ll n, a[N], a0[N], b[N], b0[N], p[N], ans;
inline void upd()
{
for(int i = 0; i < n - 1; ++i)
a[i + 1] = a[i] + b[i];
}
inline ll getval()
{
ll sum = 0, sqrsum = 0;
for(int i = 0; i < n; ++i)
sum += a[i], sqrsum += a[i]*a[i];
return n * sqrsum - sum * sum;
}
void random_shuffle(void)
{
for(int i = 0;i < n-1;i ++)
{
swap(b0[i],b0[rand()%(n-1)]);
}
}
int main()
{
srand(time(0));
for(int i = 0;i < 100;i ++)srand(rand()+rand());
n = read();
a[0] = read();
for(int i = 1; i < n; ++i)
a[i] = read(), b[i - 1] = b0[i - 1] = a[i] - a[i - 1];
ans = getval();
clock_t start = clock();
while(double(clock() - start) / CLOCKS_PER_SEC < 0.04)
{
random_shuffle();
for(int i = 0;i < n - 1;++i)b[i]=b0[i];
sort(b, b + n - 1);
for(int i = 0; i < n - 1; ++i)
{
if(!b0[i]) continue;
for(int j = n - 2;j >= i;-- j)
{
if(b[j]==b0[i])
{
for(int k = j;k > i;-- k)b[k]=b[k-1];
break;
}
}
for(int j = 0;j <= i;j ++)
{
if(b[j]<b0[i])
{
for(int k = i;k > j;k --)b[k]=b[k-1];
b[j]=b0[i];
break;
}
}
upd();
ans = min(ans, getval());
}
}
printf("%lld", ans);
return 0;
}
总时长能进1s