output_description: Print the minimum possible sadness of Snuke.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      A_1 A_2 ... A_N
attempt: import sys
  import heapq
  import re
  from itertools import permutations
  from bisect import bisect_left, bisect_right
  from collections import Counter, deque
  from fractions import gcd
  from math import factorial, sqrt, ceil
  from functools import lru_cache, reduce
  
  INF = 1 << 60
  MOD = 1000000007
  sys.setrecursionlimit(10**7)
  
  
  # UnionFind
  class UnionFind:
      def __init__(self, n):
          self.n = n
          self.parents = [-1] * n
  
      def find(self, x):
          if self.parents[x] < 0:
              return x
          else:
              self.parents[x] = self.find(self.parents[x])
              return self.parents[x]
  
      def union(self, x, y):
          x = self.find(x)
          y = self.find(y)
  
          if x == y:
              return
  
          if self.parents[x] > self.parents[y]:
              x, y = y, x
  
          self.parents[x] += self.parents[y]
          self.parents[y] = x
  
      def size(self, x):
          return -self.parents[self.find(x)]
  
      def same(self, x, y):
          return self.find(x) == self.find(y)
  
      def members(self, x):
          root = self.find(x)
          return [i for i in range(self.n) if self.find(i) == root]
  
      def roots(self):
          return [i for i, x in enumerate(self.parents) if x < 0]
  
      def group_count(self):
          return len(self.roots())
  
      def all_group_members(self):
          return {r: self.members(r) for r in self.roots()}
  
      def __str__(self):
          return "\n".join("{}: {}".format(r, self.members(r)) for r in self.roots())
  
  
  def is_prime(n):
      if n == 1:
          return False
      for i in range(2, int(n**0.5) + 1):
          if n % i == 0:
              return False
      return True
  
  
  # ワーシャルフロイド (任意の2頂点の対に対して最短経路を求める)
  # 計算量n^3 (nは頂点の数)
  def warshall_floyd(d, n):
      # d[i][j]: iからjへの最短距離
      for k in range(n):
          for i in range(n):
              for j in range(n):
                  d[i][j] = min(d[i][j], d[i][k] + d[k][j])
      return d
  
  
  # ダイクストラ
  def dijkstra_heap(s, edge, n):
      # 始点sから各頂点への最短距離
      d = [10**20] * n
      used = [True] * n  # True:未確定
      d[s] = 0
      used[s] = False
      edgelist = []
      for a, b in edge[s]:
          heapq.heappush(edgelist, a * (10**6) + b)
      while len(edgelist):
          minedge = heapq.heappop(edgelist)
          # まだ使われてない頂点の中から最小の距離のものを探す
          if not used[minedge % (10**6)]:
              continue
          v = minedge % (10**6)
          d[v] = minedge // (10**6)
          used[v] = False
          for e in edge[v]:
              if used[e[1]]:
                  heapq.heappush(edgelist, (e[0] + d[v]) * (10**6) + e[1])
      return d
  
  
  # 素因数分解
  def factorization(n):
      arr = []
      temp = n
      for i in range(2, int(-(-(n**0.5) // 1)) + 1):
          if temp % i == 0:
              cnt = 0
              while temp % i == 0:
                  cnt += 1
                  temp //= i
              arr.append([i, cnt])
  
      if temp != 1:
          arr.append([temp, 1])
  
      if arr == []:
          arr.append([n, 1])
  
      return arr
  
  
  # 2数の最小公倍数
  def lcm(x, y):
      return (x * y) // gcd(x, y)
  
  
  # リストの要素の最小公倍数
  def lcm_list(numbers):
      return reduce(lcm, numbers, 1)
  
  
  # リストの要素の最大公約数
  def gcd_list(numbers):
      return reduce(gcd, numbers)
  
  
  # 素数判定
  
  
  # limit以下の素数を列挙
  def eratosthenes(limit):
      A = [i for i in range(2, limit + 1)]
      P = []
  
      while True:
          prime = min(A)
  
          if prime > sqrt(limit):
              break
  
          P.append(prime)
  
          i = 0
          while i < len(A):
              if A[i] % prime == 0:
                  A.pop(i)
                  continue
              i += 1
  
      for a in A:
          P.append(a)
  
      return P
  
  
  # 同じものを含む順列
  def permutation_with_duplicates(L):
  
      if L == []:
          return [[]]
  
      else:
          ret = []
  
          # set（集合）型で重複を削除、ソート
          S = sorted(set(L))
  
          for i in S:
  
              data = L[:]
              data.remove(i)
  
              for j in permutation_with_duplicates(data):
                  ret.append([i] + j)
  
          return ret
  
  
  # ここから書き始める
  n = int(input())
  a = list(map(int, input().split()))
  
  a2 = sorted([a[i] - i for i in range(n)])
  median = a2[n // 2]
  ans = sum([abs(a2[i] - median) for i in range(n)])
  print(ans)
  
problem_description: 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.
samples: [{"input": "5\n    2 2 3 5 5", "output": "2\n    \n\nIf we choose b=0, the sadness of Snuke would be\nabs(2-(0+1))+abs(2-(0+2))+abs(3-(0+3))+abs(5-(0+4))+abs(5-(0+5))=2. Any choice\nof b does not make the sadness of Snuke less than 2, so the answer is 2.\n\n* * *"}, {"input": "9\n    1 2 3 4 5 6 7 8 9", "output": "0\n    \n\n* * *"}, {"input": "6\n    6 5 4 3 2 1", "output": "18\n    \n\n* * *"}, {"input": "7\n    1 1 1 1 2 3 4", "output": "6"}]