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 5.4.1) (judge verdict: Accepted)

#include <stdio.h>
#include <stdlib.h>

long long max(long long a, long long b){
  if(a < b) return b;
  return a;
}

int compare_int(const void *a,const void *b){
  if(*(int*)a > *(int*)b) return 1;
  return -1;
}

int compare_int_reverse(const void *a,const void *b){
  if(*(int*)a < *(int*)b) return 1;
  return -1;
}

int main(void){
  int N;
  scanf("%d", &N);

  int A[N];
  for (int i = 0; i < N; i++) {
    scanf("%d", &A[i]);
  }

  qsort(A, N, sizeof(int), compare_int);

  long long ans1 = 0;
  if(N%2 == 0){
    for (int i = 0; i < N; i++) {
      if(i < N/2) ans1 -= A[i]*2;
      else ans1 += A[i]*2;
    }
    ans1 += A[N/2-1];
    ans1 -= A[N/2];
  }else{
    for (int i = 0; i < N; i++){
      if(i <= N/2) ans1 -= 2*A[i];
      else ans1 += 2*A[i];
    }
    ans1 += A[N/2];
    ans1 += A[N/2-1];
  }

  qsort(A, N, sizeof(int), compare_int_reverse);

  long long ans2 = 0;
  if(N%2 == 0){
    for (int i = 0; i < N; i++) {
      if(i < N/2) ans2 -= A[i]*2;
      else ans2 += A[i]*2;
    }
    ans2 += A[N/2-1];
    ans2 -= A[N/2];
  }else{
    for (int i = 0; i < N; i++){
      if(i <= N/2) ans2 -= 2*A[i];
      else ans2 += 2*A[i];
    }
    ans2 += A[N/2];
    ans2 += A[N/2-1];
  }

  printf("%lld\n", max(ans1, -ans2));

  return 0;
}