#3446. 等差数列变换(arith)
等差数列变换(arith)
题目描述
小明有一个长度为 的正整数数列 。他希望用最少的操作次数将这个数列变成一个等差数列。
每次操作,小明可以选择数列中的一个元素,将其加 或减 。每个元素最多只能被操作一次(即对于每个元素,小明可以选择不变、加 或减 ,且只能选择一次)。
如果一个数列满足:对于任意 ,都有 的值相同,则称这个数列为等差数列。特别地,长度为 或 的数列一定是等差数列。
请你帮小明计算:最少需要进行多少次操作,才能使数列变成等差数列?如果无论如何都无法做到,请输出 。
注意:操作后的数列中的元素可以是 。
输入格式
第一行包含一个整数 ,表示数列的长度。
第二行包含 个整数 ,表示数列的初始值。
输出格式
输出一个整数,表示最少需要的操作次数。如果无法将数列变成等差数列,则输出 。
样例
样例 1 输入
3
4 6 8
样例 1 输出
0
样例 1 解释
数列 已经是公差为 的等差数列,不需要任何操作。
样例 2 输入
4
4 7 9 12
样例 2 输出
2
样例 2 解释
一种最优方案:将 加 变为 ,将 减 变为 。操作后数列为 ,是公差为 的等差数列。共操作 次。
样例 3 输入
3
1 10 1
样例 3 输出
-1
样例 3 解释
无论对前两个元素如何操作(各至多 ),都无法使第三个元素通过至多 的调整后与前两个元素构成等差数列。
样例 4 输入
5
1 3 6 9 12
样例 4 输出
1
样例 4 解释
将 减 变为 。操作后数列为 ,是公差为 的等差数列。共操作 次。
数据范围
对于所有测试数据,保证 ,。
本题采用捆绑测试计分。对于每个子任务,只有通过该子任务的全部测试点,才能获得该子任务的分数。
| 子任务 | 分值 | 特殊性质 | 计分方式 |
|---|---|---|---|
| 捆绑 | |||
| ,且 | |||
| 无额外限制 |