小码哥最近获得了 n 颗珍珠,第 i 颗珍珠以任意顺序排列后串成一串项链,定义一个项链的美观值为相邻珍珠的美观值之差的绝对值之和,即
其中 ai 为重新排列后的项链上的第 i 颗珍珠的美观值,由于项链是一个环,我们这里定义
现在他想知道,在所有可能的情况下得到的项链的最大美观值为多少。请你编写一个程序帮助他计算一下这个值。
小码哥最近获得了 n 颗珍珠,第 i 颗珍珠以任意顺序排列后串成一串项链,定义一个项链的美观值为相邻珍珠的美观值之差的绝对值之和,即
可以参考参考我的代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[10000],maxn=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",a+i);
for(int i=0;i<n;i++){
if(abs(a[0]-a[n-1])+abs(a[1]-a[2])<abs(a[1]-a[n-1])+abs(a[0]-a[2]))
swap(a[0],a[1]);
for(int j=1;j<n-2;j++)
if(abs(a[j]-a[j-1])+abs(a[j+1]-a[j+2])<abs(a[j+1]-a[j-1])+abs(a[j]-a[j+2]))
swap(a[j],a[j+1]);
if(abs(a[n-3]-a[n-4])+abs(a[n-2]-a[n-1])<abs(a[n-2]-a[n-4])+abs(a[n-1]-a[n-3]))
swap(a[n-2],a[n-1]);
if(abs(a[n-2]-a[n-3])+abs(a[n-1]-a[0])<abs(a[n-1]-a[n-3])+abs(a[0]-a[n-2]))
swap(a[n-1],a[0]);
}
for(int i=0;i<n-1;i++)
maxn+=abs(a[i]-a[i+1]);
maxn+=abs(a[n-1]-a[0]);
printf("%d",maxn);
}