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 Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)

import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		long[]A = new long[N];
		for(int i = 0; i < N; i++) {
			A[i] = sc.nextLong();
		}
		sc.close();
		Arrays.sort(A);
		long[]B = new long[N];
		if(N == 3) {
			B[0] = A[2];
			B[1] = A[0];
			B[2] = A[1];
			System.out.println(sum(B));
			System.exit(0);
		}

		int l = N / 2;
		if(N % 2 == 1) {
			Deque<Long> st1 = new ArrayDeque<Long>();
			Deque<Long> st2 = new ArrayDeque<Long>();
			for(int i = 1; i <= l; i++) {
				st1.addLast(A[i]);
			}
			for(int i = l + 1; i < N; i++) {
				st2.addFirst(A[i]);
			}
			int t = 1;
			B[l] = A[0];
			for(int i = 0; i < N; i++) {
				if(i == l) {
					t = -1;
					continue;
				}
				if(t == 1) {
					B[i] = st1.pollLast();
				}else {
					B[i] = st2.pollFirst();
				}
				t *= -1;
			}
			//disp(B);
			System.out.println(sum(B));
		}else {
			Deque<Long> st1 = new ArrayDeque<Long>();
			Deque<Long> st2 = new ArrayDeque<Long>();
			for(int i = 0; i < l; i++) {
				st1.addLast(A[i]);
			}
			for(int i = l; i < N; i++) {
				st2.addFirst(A[i]);
			}
			int t = 1;
			for(int i = 0; i < N; i++) {
				if(t == 1) {
					B[i] = st1.pollLast();
				}else {
					B[i] = st2.pollFirst();
				}
				t *= -1;
			}
			//disp(B);
			System.out.println(sum(B));
		}
	}

	static void disp(long[]a) {
		for(long i : a) {
			System.out.print(i + " ");
		}
		System.out.println();
	}
	static long sum(long[]a) {
		long t = 0;
		for(int i = 1; i < a.length; i++) {
			t += Math.abs(a[i] - a[i - 1]);
		}
		return t;
	}
}