Problem:
Score : 300 points

Problem Statement

Snuke has an integer sequence A of length N.

He will freely choose an integer b.
Here, he will get sad if A_i and b+i are far from each other.
More specifically, the sadness of Snuke is calculated as follows:

abs(A_1 - (b+1)) + abs(A_2 - (b+2)) + ... + abs(A_N - (b+N))

Here, abs(x) is a function that returns the absolute value of x.

Find the minimum possible sadness of Snuke.

Constraints

1 \leq N \leq 2 \times 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_2 ... A_N

Output

Print the minimum possible sadness of Snuke.

Sample Input 1

5
2 2 3 5 5

Sample Output 1

2

If we choose b=0, the sadness of Snuke would be abs(2-(0+1))+abs(2-(0+2))+abs(3-(0+3))+abs(5-(0+4))+abs(5-(0+5))=2.
Any choice of b does not make the sadness of Snuke less than 2, so the answer is 2.

Sample Input 2

9
1 2 3 4 5 6 7 8 9

Sample Output 2

0

Sample Input 3

6
6 5 4 3 2 1

Sample Output 3

18

Sample Input 4

7
1 1 1 1 2 3 4

Sample Output 4

6

Solution in Go (1.6) (judge verdict: Wrong Answer)

package main

import "os"
import "fmt"
import "bufio"
import "strconv"

func main() {
    var sc = bufio.NewScanner(os.Stdin)
    sc.Split(bufio.ScanWords)
    sc.Scan()
    n, _ := strconv.Atoi(sc.Text())
    a := []int{}
    for i := 0; i < n; i++ {
        sc.Scan()
        num, _ := strconv.Atoi(sc.Text())
        a = append(a, num)
    }

    // m, i := max(a)
    // aaa := aaa(a)
    // m, i := min(aaa)
    b := bbb(a)

    // fmt.Printf("%d\n", fn(a, abs(m - i)))
    fmt.Printf("%d\n", fn(a, -b))
}

func max(a []int) (int, int) {
    max := 0
    index := 0
    for i := 0; i < len(a); i++ {
        if max < a[i] {
            max = a[i]
            index = i
        }
    }
    return max, index
}

func min(a []int) (int, int) {
    min := 0
    index := 0
    for i := 0; i < len(a); i++ {
        if min > a[i] {
            min = a[i]
            index = i
        }
    }
    return min, index
}

func mid(a []int) (int, int) {
    avg := sum(a) / len(a)
    a2 := sort(a)
    for i := 0; i < len(a2); i++ {
        if avg < a2[i] {
            return a2[i], i
        }
    }
    return 0, 0
}

func aaa(a []int) []int {
    r := []int{}
    for i := 0; i < len(a); i++ {
        r = append(r, abs(a[i] - i + 1))
    }
    return r
}

func bbb(a []int) int {
    s := []int{}
    for i := 0; i < len(a); i++ {
        s = append(s, abs(a[i] - (i + 1)))
    }
    hoge := map[int]int{}
    for i := 0; i < len(s); i++ {
        hoge[s[i]] = hoge[s[i]] + 1
    }
    mx := 0
    ky := 0
    for k, v := range hoge {
        if mx < v {
            mx = v
            ky = k
        }
    }
    return ky
}

func sort(a []int) []int {
    for i := 0; i < len(a); i++ {
        for j := i + 1; j < len(a); j++ {
            if a[i] > a[j] {
                tmp := a[i]
                a[i] = a[j]
                a[j] = tmp
            }
        }
    }
    return a
}

func fn(a []int, b int) int {
    total := 0
    for i := 0; i < len(a); i++ {
        total = total + abs(a[i] - (b + i + 1))
        //fmt.Printf("%d - (%d + %d) = %d\n", a[i], b, i + 1, abs(a[i] - (b + i + 1)))
    }
    return total
}

func abs(v int) int {
    if v < 0 {
        return -v
    } else {
        return v
    }
}

func sum(a []int) int {
    sum := 0
    for i := 0; i < len(a); i++ {
        sum = sum + a[i]
    }
    return sum
}