CF1675B Make It Increasing
题目描述
给定 $n$ 个整数 $a_1, a_2, \dots, a_n$。你可以对它们进行如下操作:
- 选择任意一个元素 $a_i$($1 \le i \le n$),并将其除以 $2$(向下取整)。换句话说,你可以将选中的元素 $a_i$ 替换为 $\left \lfloor \frac{a_i}{2}\right\rfloor$(其中 $\left \lfloor x \right\rfloor$ 表示对实数 $x$ 向下取整)。
请输出使该整数序列变为严格递增(即满足 $a_1 < a_2 < \dots < a_n$)所需的最少操作次数。如果无法得到这样的序列,则输出 "-1"。注意,元素不能交换,唯一允许的操作如上所述。
例如,设 $n = 3$,给定的数列为 $[3, 6, 5]$。那么只需进行两次操作:
- 将 $a_2=6$ 替换为 $\left \lfloor \frac{6}{2}\right\rfloor = 3$,得到序列 $[3, 3, 5]$;
- 然后将 $a_1=3$ 替换为 $\left \lfloor \frac{3}{2}\right\rfloor = 1$,得到序列 $[1, 3, 5]$。
最终得到的序列是严格递增的,因为 $1 < 3 < 5$。
输入格式
输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。
接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 30$)。
每个测试用例的第二行包含恰好 $n$ 个整数 $a_1, a_2, \dots, a_n$($0 \le a_i \le 2 \times 10^9$)。
输出格式
对于每个测试用例,输出一个整数,表示将序列变为严格递增所需的最少操作次数。如果无法得到严格递增的序列,则输出 "-1"。
说明/提示
第一个测试用例已在题目描述中分析。
第二个测试用例中,不可能得到严格递增的序列。
第三个测试用例中,序列已经是严格递增的。
由 ChatGPT 4.1 翻译