编程题
好等差数列 ### 问题描述 等差数列是指从第二项开始, 每一项与它前一项的差为同一个常数的数列, 这个常数称为等差数列的公差。公差为整数的等差数列称为 “好等差数列”。 一个数列到 “好等差数列” 的距离定义如下:找到一个最小的非负整数 $k$, 使得将这个数列中的 $k$ 个数修改后 (可以修改为任意值), 数列可以变为一 个 “好等差数列”, 就称这个数列到 “好等差数列” 的距离为 $k$ 。例如, 数列 $(1,2,3,5)$ 到 “好等差数列” 的距离为 1 , 因为将最后一个数字修改为 4 之后, $(1,2,3,4)$ 就是一个公差为 1 的 “好等差数列”。 小蓝现在有一个长度为 $n$ 的数列 $A=\left(a_{0}, a_{1}, \cdots, a_{n-1}\right)$ 。小蓝会对这个数列 进行 $m$ 次修改操作, 每次修改数列中的一个元素, 每次修改过后, 小蓝都想知 道当前的数列到 “好等差数列” 的距离是多少, 请你帮他计算。 ### 输入格式 输入的第一行包含一个整数 $n$, 表示数列的长度。 第二行包含 $n$ 个整数 $a_{0}, a_{1}, \cdots, a_{n-1}$, 相邻两个整数之间用一个空格分隔。 第三行包含一个整数 $m$, 表示修改的次数。 接下来 $m$ 行, 每行包含两个整数 $p, v$, 用一个空格分隔, 表示将数列 $A$ 中 下标为 $p$ 的元素修改为 $v_{\text {。 }}$ ### 输出格式 输出一行包含 $m$ 个整数, 相邻两个整数之间用一个空格分隔, 其中第 $i$ 个 整数表示经过前 $i$ 次修改操作之后, 数列到 “好等差数列” 的距离。 ### 样例输入 ```text 3 0 1 7 2 1 0 2 0 ``` ### 样例输出 ```text 1 0 ``` ### 样例说明 第一次修改后, 数列 $A=(0,0,7)$, 它到 “好等差数列” 的距离为 1 , 即至 少修改其中一个元素后数列 $A$ 就可以变成 “好等差数列”。有多种实现方案: 1) 将第三个元素更改为 0 变为 $(0,0,0)$ 是一个 “好等差数列”, 公差为 $0$。 2) 将第一个元素更改为 $ -7$ 变为 $(-7,0,7)$ 也是一个 “好等差数列”, 公差为 7 。 注意上述两种方案中提到的更改并不是真的对数列 $A$ 进行修改, 而是为了表述数 列是如何转化到 “好等差数列” 的。 第二次修改后, 数列 $A=(0,0,0)$, 他已经是一个 “好等差数列”了, 所以 答宓就是 0 。 ### 评测用例规模与约定 对于 $20 \\%$ 的评测用例, $1 \leq n, m \leq 10,0 \leq a_{i}, v \leq 10$ : 对于 $50 \\%$ 的评测用例, $1 \leq n \leq 100 , 1 \leq m \leq 1000,0 \leq a_{i}, v \leq 10000$ : 对于所有评测用例, $1 \leq n, m \leq 1000,0 \leq a_{i}, v \leq 10000,0 \leq p \leq n-1$ 。注 意, 以上为输入数据的限制, 在判断是否为 “好等差数列” 时, 修改的数可以 超过 0 至 10000 的范围。
查看答案
赣ICP备20007335号-2