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 Perl (v5.18.2) (judge verdict: Accepted)

#!/usr/bin/perl
my ($n) = map { $_ - 0 } split(/\s+/,<STDIN>);
my @a = ();
for(my $i=0;$i<$n;$i++){
  my ($a) = map { $_ - 0 } split(/\s+/,<STDIN>);
  push(@a,$a);
}
my @sa = sort { $a <=> $b } @a;
my $m = int( $n / 2 );
my $v = 0;
if( $n % 2 == 0 ){ # 均等
  my @sa_min = (@sa[0..($m-1)]);
  my @sa_max = (@sa[$m..$#sa]);
  
  $v += $sa_max[0];
  if( $m>1 ){
    for(my $i=1;$i<=$#sa_max;$i++){
      $v += 2 * $sa_max[$i];
    }
  }
  $v -= $sa_min[$#sa_min];
  if( $m>1 ){
    for(my $i=$#sa_min-1;$i>=0;$i--){
      $v -= 2 * $sa_min[$i];
    }
  }
} else {
  my $v1 = 0;
  my @sa_min = (@sa[0..($m-1)]);
  my @sa_max = (@sa[$m..$#sa]);    # max 寄りの方をたくさん確保の場合
  
  $v1 += $sa_max[0] + $sa_max[1];
  if( $#sa_max > 1 ){
    for(my $i=2;$i<=$#sa_max;$i++){
      $v1 += 2 * $sa_max[$i];
    }
  }
  for(my $i=0;$i<=$#sa_min;$i++){
    $v1 -= 2 * $sa_min[$i];
  }
  my $v2 = 0;
  my @sa_min = (@sa[0..$m]); # min 寄りの方をたくさん確保の場合
  my @sa_max = (@sa[($m+1)..$#sa]);    
  
  $v2 -= $sa_min[$#sa_min-1] + $sa_min[$#sa_min];
  if( $#sa_min > 1 ){
    for(my $i=0;$i<$#sa_min-1;$i++){
      $v2 -= 2 * $sa_min[$i];
    }
  }
  for(my $i=0;$i<=$#sa_max;$i++){
    $v2 += 2 * $sa_max[$i];
  }
  $v = ( $v1 > $v2 ? $v1 : $v2 );
}
print "$v\n";