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>
#define rep(i, a, b) for(int i = int(a); i < int(b); i++)
#define rer(i, a, b) for(int i = int(a) - 1; i >= int(b); i--)
#define sz(v) (int)(v).size()
#define pb push_back
#define sc second
#define fr first
#define sor(v) sort(v.begin(),v.end())
#define rev(s) reverse(s.begin(),s.end())
#define lb(vec,a) lower_bound(vec.begin(),vec.end(),a)
#define ub(vec,a) upper_bound(vec.begin(),vec.end(),a)
#define uniq(vec) vec.erase(unique(vec.begin(),vec.end()),vec.end())
using namespace std;
typedef long long int ll;
typedef pair <int, int> P;

const ll MOD=1000000007;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    ll N;
    cin>>N;
    vector<ll> A;
    rep(i,0,N){
        ll a;
        cin>>a;
        A.pb(a);
    }
    sor(A);
    ll res1=0,res2=0;
    if(N%2){
        rep(i,N/2+1,N){
            res1+=2*A[i];
        }
        rep(i,0,N/2-1){
            res1-=2*A[i];
        }
        res1-=A[N/2-1]+A[N/2];
        rep(i,0,N/2){
            res2-=2*A[i];
        }
        rep(i,N/2,N){
            res2+=2*A[i];
        }
        res2-=A[N/2]+A[N/2+1];
    }
    else{
        rep(i,N/2,N){
            res1+=2*A[i];
        }
        rep(i,0,N/2){
            res1-=2*A[i];
        }
        res1+=-A[N/2]+A[N/2-1];
    }
    cout <<max(res1,res2)<<"\n";
}