CF1654E Arithmetic Operations

题目描述

给定一个整数数组 $a_1, a_2, \ldots, a_n$。 你可以进行如下操作任意次(可以为零次): - 选择任意一个下标 $i$,并将 $a_i$ 赋值为任意整数(可以为正数、负数或 $0$)。 你需要求出将数组 $a$ 变为等差数列所需的最少操作次数。若对于任意 $2 \leq i \leq n-1$,都有 $a_{i+1} - a_i = a_i - a_{i-1}$,则数组 $a$ 是等差数列。

输入格式

第一行包含一个整数 $n$($1 \le n \le 10^5$)。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 10^5$)。

输出格式

输出一个整数,表示将 $a$ 变为等差数列所需的最少操作次数。

说明/提示

在第一个测试样例中,你可以通过 $6$ 次操作将数组 $a$ 变为 $[11, 10, 9, 8, 7, 6, 5, 4, 3]$: - 将 $a_3$ 设为 $9$:数组变为 $[3, 2, 9, 8, 6, 9, 5, 4, 1]$; - 将 $a_2$ 设为 $10$:数组变为 $[3, 10, 9, 8, 6, 9, 5, 4, 1]$; - 将 $a_6$ 设为 $6$:数组变为 $[3, 10, 9, 8, 6, 6, 5, 4, 1]$; - 将 $a_9$ 设为 $3$:数组变为 $[3, 10, 9, 8, 6, 6, 5, 4, 3]$; - 将 $a_5$ 设为 $7$:数组变为 $[3, 10, 9, 8, 7, 6, 5, 4, 3]$; - 将 $a_1$ 设为 $11$:数组变为 $[11, 10, 9, 8, 7, 6, 5, 4, 3]$。 此时 $a$ 是等差数列:实际上,对于任意 $2 \leq i \leq n-1$,都有 $a_{i+1} - a_i = a_i - a_{i-1} = -1$。 不存在少于 $6$ 次操作就能将 $a$ 变为等差数列的方案。 在第二个测试样例中,你可以通过 $10$ 次操作将数组 $a$ 变为 $[-1, 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38]$。 在第三个测试样例中,你可以通过 $7$ 次操作将数组 $a$ 变为 $[100000, 80000, 60000, 40000, 20000, 0, -20000, -40000, -60000, -80000]$。 由 ChatGPT 4.1 翻译