問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
長さ N の数列 A = (A_1, A_2, ... A_N) があります。
あなたは以下の 2 種類の操作を、任意の順番で任意の回数だけ行うことができます。
・操作 1 : 1 ≦ i ≦ N を満たす i を 1 つ選び、 A_i に 1 減算する
・操作 2 : 1 ≦ i ≦ N を満たす i を 1 つ選び、 A_i に 1 加算する
数列のすべての隣接する要素の差の絶対値が 1 以下であるような数列を良い数列と呼びます。
より形式的には、長さ N の数列 B = (B_1, B_2, ... , B_N) が以下の条件を満たすとき、B は良い数列です。
・すべての i (1 ≦ i ≦ N-1) に対して |B_i - B_{i+1}| ≦ 1
与えられた数列 A を良い数列にするために必要な操作回数の最小値を出力してください。
入力例 1 では、以下のように操作することで良い数列を得ることができます。
・i = 2 として操作 1 を 3 回行う
・i = 4 として操作 2 を 2 回行う
操作後の数列は [5, 5, 4, 3] であり、これは良い数列です。
4 回以下の操作で良い数列を得ることはできないので、5 を出力します。
入力は以下のフォーマットで与えられます。
N
A_1 A_2 ... A_N
与えられた数列 A をいい数列にするために必要な操作回数の最小値を出力してください。
最後は改行し、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ N ≦ 2000
・0 ≦ A_i ≦ 1000
4
5 8 4 1
5
15
742 916 805 618 76 67 243 657 638 246 16 767 0 253 460
4215