package main import ( "bufio" "fmt" "math" "os" "strconv" ) func main() { var n int _, _ = fmt.Scan(&n) sc := bufio.NewScanner(os.Stdin) sc.Split(bufio.ScanWords) nums := make([]int, n) min := math.MaxInt64 max := math.MinInt64 for i := range nums { sc.Scan() a, _ := strconv.Atoi(sc.Text()) nums[i] = a if min > a { min = a } if max < a { max = a } } // fmt.Println(min, max) // fmt.Println(nums) var minD, maxD int for _, a := range nums { minD += int(math.Abs(float64(min - a))) maxD += int(math.Abs(float64(max - a))) } // fmt.Println(minD, maxD) for math.Abs(float64(max-min)) > 1 { c := (max + min) / 2 d := 0 for _, a := range nums { d += int(math.Abs(float64(c - a))) } if maxD > minD { max = c maxD = d } else if maxD < minD { min = c minD = d } else { min, minD, max, maxD = c, d, c, d } fmt.Println(min, minD, max, maxD, c, d) } fmt.Println(int(math.Min(float64(minD), float64(maxD)))) }