Problem:
Score : 400 points

Problem Statement

You are given N integers; the i-th of them is A_i.
Find the maximum possible sum of the absolute differences between the adjacent elements after arranging these integers in a row in any order you like.

Constraints

2 \leq N \leq 10^5

1 \leq A_i \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1
:
A_N

Output

Print the maximum possible sum of the absolute differences between the adjacent elements after arranging the given integers in a row in any order you like.

Sample Input 1

5
6
8
1
2
3

Sample Output 1

21

When the integers are arranged as 3,8,1,6,2, the sum of the absolute differences between the adjacent elements is |3 - 8| + |8 - 1| + |1 - 6| + |6 - 2| = 21. This is the maximum possible sum.

Sample Input 2

6
3
1
4
1
5
9

Sample Output 2

25

Sample Input 3

3
5
5
1

Sample Output 3

8

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<bits/stdc++.h>
using namespace std;
#define rep(i,s,t) for(int i=(s);i<(t);++i)
#define per(i,s,t) for(int i=((t)-1);i>=s;--i)
#define repb(i,s,t) for(int i=(s);i<=(t);++i)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)x.size())
#define mst(a,b) memset(a,b,sizeof(a))
#define mcpy(des,sor) memcpy(des,sor,sizeof(sor))
#define dd(x) cout<<#x<<'='<<x<<' '
#define de(x) cout<<#x<<'='<<x<<'\n'
#define fi first
#define se second
#define sq(x) ((x)*(x))
typedef long long ll;
typedef pair<int,int> pii;
typedef double db;

const int inf = 0x3f3f3f3f;
const ll mod = 1e9+7;
const db eps = 1e-8;


int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int n,a;ll s=0,t;vector<int> v;
	cin>>n;
	rep(i,0,n){cin>>a;v.pb(a);}
	sort(all(v));reverse(all(v));
	if(sz(v)%2==0)
	{
		rep(i,0,sz(v)/2)s+=2*v[i];
		s-=v[sz(v)/2-1];
		rep(i,sz(v)/2,sz(v))s-=2*v[i];
		s+=v[sz(v)/2];
		cout<<s<<endl;
	}
	else
	{
		t=0;
		rep(i,0,sz(v)/2)t+=2*v[i];
		rep(i,sz(v)/2,sz(v))t-=2*v[i];
		t+=v[sz(v)/2],t+=v[sz(v)/2+1];
		s=max(s,t);
		t=0;
		rep(i,0,sz(v)/2+1)t+=2*v[i];
		t-=v[sz(v)/2];t-=v[sz(v)/2-1];
		rep(i,sz(v)/2+1,sz(v))t-=2*v[i];
		s=max(s,t);
		cout<<s<<endl;
	}
}