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

package main

// 実験する 両端においていく？
// 最後のやつを先頭に付けるタイプとそのままのタイプで比較（なんでだろうね
// 6ケースでなぜかWA まじでなんでだろうね 意味不明
// じゃ先頭のやつを最後に付けるのも試す？

import (
	"fmt"
	"sort"
)

func main() {
	var N int
	fmt.Scan(&N)
	A := make([]int, N)
	for i := 0; i < N; i++ {
		var V int
		fmt.Scan(&V)
		A[i] = V
	}
	B := append([]int{}, A...)
	sort.Sort(sort.Reverse(sort.IntSlice(A)))
	sort.Ints(B)
	s, t := []int{}, []int{}
	l, r := 0, N-1
	for l <= r {
		s = append(s, A[l])
		t = append(t, B[l])
		l++
		if l > r {
			break
		}
		s = append(s, A[r])
		t = append(t, B[r])
		r--
	}
	// 意味がわからんが先頭を末尾に/末尾を先頭にしたものを揃えてみる 意味は分からんが
	// なんかサンプルではans5かans6になりそうだがなぜなのかは不明
	ans1, ans2 := 0, 0
	for i := 1; i < N; i++ {
		ans1 += abs(s[i-1] - s[i])
		ans2 += abs(t[i-1] - t[i])
	}
	ans3 := ans1 - abs(s[0]-s[1]) + abs(s[0]-s[N-1])
	ans4 := ans2 - abs(t[0]-t[1]) + abs(t[0]-t[N-1])
	ans5 := ans1 - abs(s[N-2]-s[N-1]) + abs(s[0]-s[N-1])
	ans6 := ans2 - abs(t[N-2]-t[N-1]) + abs(t[0]-t[N-1])
	fmt.Println(max(ans1, max(ans2, max(ans3, max(ans4, max(ans5, ans6))))))
}

func max(a, b int) int {
	if a < b {
		return b
	}
	return a
}

func abs(x int) int {
	if x < 0 {
		x *= -1
	}
	return x
}