#3446. 等差数列变换(arith)

等差数列变换(arith)

题目描述

小明有一个长度为 nn 的正整数数列 a1,a2,,ana_1, a_2, \dots, a_n。他希望用最少的操作次数将这个数列变成一个等差数列。

每次操作,小明可以选择数列中的一个元素,将其加 11 或减 11。每个元素最多只能被操作一次(即对于每个元素,小明可以选择不变、加 11 或减 11,且只能选择一次)。

如果一个数列满足:对于任意 1i<n1 \le i < n,都有 ai+1aia_{i+1} - a_i 的值相同,则称这个数列为等差数列。特别地,长度为 1122 的数列一定是等差数列。

请你帮小明计算:最少需要进行多少次操作,才能使数列变成等差数列?如果无论如何都无法做到,请输出 1-1

注意:操作后的数列中的元素可以是 00

输入格式

第一行包含一个整数 nn,表示数列的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,表示数列的初始值。

输出格式

输出一个整数,表示最少需要的操作次数。如果无法将数列变成等差数列,则输出 1-1

样例

样例 1 输入

3
4 6 8

样例 1 输出

0

样例 1 解释

数列 [4,6,8][4, 6, 8] 已经是公差为 22 的等差数列,不需要任何操作。

样例 2 输入

4
4 7 9 12

样例 2 输出

2

样例 2 解释

一种最优方案:将 a1a_111 变为 55,将 a4a_411 变为 1111。操作后数列为 [5,7,9,11][5, 7, 9, 11],是公差为 22 的等差数列。共操作 22 次。

样例 3 输入

3
1 10 1

样例 3 输出

-1

样例 3 解释

无论对前两个元素如何操作(各至多 ±1\pm 1),都无法使第三个元素通过至多 ±1\pm 1 的调整后与前两个元素构成等差数列。

样例 4 输入

5
1 3 6 9 12

样例 4 输出

1

样例 4 解释

a1a_111 变为 00。操作后数列为 [0,3,6,9,12][0, 3, 6, 9, 12],是公差为 33 的等差数列。共操作 11 次。

数据范围

对于所有测试数据,保证 1n1000001 \le n \le 100\,0001ai1091 \le a_i \le 10^9

本题采用捆绑测试计分。对于每个子任务,只有通过该子任务的全部测试点,才能获得该子任务的分数。

子任务 分值 特殊性质 计分方式
11 1010 n3n \le 3 捆绑
22 3n83 \le n \le 8,且 a1=a2==ana_1 = a_2 = \dots = a_n
33 1515 3n83 \le n \le 8
44 2525 n1000n \le 1000
55 4040 无额外限制