CF1675B.Make It Increasing

传统题 时间 2000 ms 内存 256 MiB 4 尝试 1 已通过 1 标签

Make It Increasing

题目描述

给定 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n。你可以对它们进行如下操作:

  • 选择任意一个元素 aia_i1in1 \le i \le n),并将其除以 22(向下取整)。换句话说,你可以将选中的元素 aia_i 替换为 ai2\left \lfloor \frac{a_i}{2}\right\rfloor(其中 x\left \lfloor x \right\rfloor 表示对实数 xx 向下取整)。

请输出使该整数序列变为严格递增(即满足 a1<a2<<ana_1 < a_2 < \dots < a_n)所需的最少操作次数。如果无法得到这样的序列,则输出 "-1"。注意,元素不能交换,唯一允许的操作如上所述。

例如,设 n=3n = 3,给定的数列为 [3,6,5][3, 6, 5]。那么只需进行两次操作:

  • a2=6a_2=6 替换为 62=3\left \lfloor \frac{6}{2}\right\rfloor = 3,得到序列 [3,3,5][3, 3, 5]
  • 然后将 a1=3a_1=3 替换为 32=1\left \lfloor \frac{3}{2}\right\rfloor = 1,得到序列 [1,3,5][1, 3, 5]

最终得到的序列是严格递增的,因为 1<3<51 < 3 < 5

输入格式

输入的第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。

接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n301 \le n \le 30)。

每个测试用例的第二行包含恰好 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n0ai2×1090 \le a_i \le 2 \times 10^9)。

输出格式

对于每个测试用例,输出一个整数,表示将序列变为严格递增所需的最少操作次数。如果无法得到严格递增的序列,则输出 "-1"。

说明/提示

第一个测试用例已在题目描述中分析。

第二个测试用例中,不可能得到严格递增的序列。

第三个测试用例中,序列已经是严格递增的。

由 ChatGPT 4.1 翻译

样例

7
3
3 6 5
4
5 3 2 1
5
1 2 3 4 5
1
1000000000
4
2 8 7 5
5
8 26 5 21 10
2
5 14
2
-1
0
0
4
11
0

在线编程 IDE

建议全屏模式获得最佳体验