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: Wrong Answer)

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

int main(){
  int i,j;
  int n;
  int x;
  long long y=0;
  int l=0;

  scanf("%d",&n);

  long long a[n];
  long long p[n];

  for(i=0; i<=n-1; i++){
    p[i] = 0;
  }

  for(i=0; i<=n-1; i++){
    scanf("%lld",&a[i]);
  }

  for(i=0; i<=n-1; i++){
    for(j=i+1; j<=n-1; j++){
      if(a[j]<a[i]){
        x = a[i];
        a[i] = a[j];
        a[j] = x;
      }
    }
  }

  if(n==2){
    for(i=0; i<=n-1; i++){
      p[i] = a[i];
    }
    l++;
  }
  if(n==3){
    if(a[0]<=a[1] && a[0]<=a[2]){
      p[1] = a[0];
      p[0] = a[1];
      p[2] = a[2];
    }else if(a[1]<=a[0] && a[1]<=a[2]){
      p[1] = a[1];
      p[0] = a[0];
      p[2] = a[2];
    }else{
      p[1] = a[2];
      p[0] = a[0];
      p[2] = a[1];
    }
  }

  if(n%2==1 && l==0){
    long long c[(n-1)/2];
    for(i=0; i<=(n-1)/2-1; i++){
      c[i] = a[n-1-i];
    }

    p[(n-1)/2] = a[0];
    for(i=1; i<=(n+1)/2-1; i++){
      if(i%2==1){
        p[(n-1)/2+i+1] = a[i];
      }else{
        p[(n-1)/2-i] = a[i];
      }
    }
    p[(n-1)/2+1] = c[0];
    for(i=1; i<=(n-1)/2-1; i++){
      if(i%2==1){
        p[(n-1)/2+1-2*i] = c[i];
      }else{
        p[(n-1)/2+1+2*i] = c[i];
      }
    }
  }

  if(n%2==0 && l==0){
    long long c[n/2];
    for(i=0; i<=n/2-1; i++){
      c[i] = a[n-1-i];
    }

    p[n/2-1] = a[0];
    for(i=1; i<=n/2-1; i++){
      if(i%2==1){
        p[n/2-1+i+1] = a[i];
      }else{
        p[n/2-1-i] = a[i];
      }
    }
    p[n/2] = c[0];
    for(i=1; i<=n/2-1; i++){
      if(i%2==1){
        p[n/2-i-1] = c[i];
      }else{
        p[n/2+i] = c[i];
      }
    }
  }

  for(i=0; i<=n-2; i++){
    y = y + llabs(p[i+1]-p[i]);
  }

  printf("%lld\n",y);

  return 0;
}