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++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>

typedef long long ll;

#define rep(i, n) for (ll i = 0; i < (ll)n; ++i)
#define repr(i, n) for (ll i = n - 1; i >= 0; --i)
#define INF 10e7
#define MOD 1000000000 + 7
#define MAX 51000
#define all(x) (x).begin(), (x).end()
#define MX(x) *max_element(all(x))
#define MN(x) *min_element(all(x))
using namespace std;

void debug(deque<int> q)
{
    for (auto i : q)
        cout << i << " ";
    cout << endl;
}
vector<vector<int>> act = {{0, 0, 0, 1, 1, 1},
                           {0, 0, 1, 0, 0, 1},
                           {0, 1, 0, 0, 1, 0}};
void solve(void)
{
    int n;
    cin >> n;
    vector<int> a(n);
    rep(i, n) cin >> a[i];
    sort(all(a));
    int ans = 0;
    rep(i, 4)
    {
        deque<int> q;
        int l = 0, r = n - 1, res = 0;
        rep(j, n)
        {
            int index = r;
            if (j % 3 == 0)
                index = l;
            if (act[j % 3][i] == 0)
                q.push_back(a[index]);
            else
                q.push_front(a[index]);
            if (j % 3 == 0)
                l++;
            else
                r--;
        }
        // debug(q);
        rep(i, n - 1) res += abs(q[i] - q[i + 1]);
        ans = max(ans, res);
    }
    cout << ans << endl;
}
int main(void)
{
    solve();
}