CF1907F Shift and Reverse

题目描述

给定一个整数数组 $a_1, a_2, \ldots, a_n$。你可以对该数组进行两种操作: - 移位操作:将数组的最后一个元素移动到第一个位置,其余元素依次向右移动一位,得到数组 $a_n, a_1, a_2, \ldots, a_{n-1}$。 - 反转操作:将整个数组反转,得到数组 $a_n, a_{n-1}, \ldots, a_1$。 你的任务是使用最少的操作次数将数组按非递减顺序排序,或者判断无法通过上述操作将数组排序。

输入格式

输入的第一行为一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行为一个整数 $n$($1 \le n \le 10^5$),表示数组的大小。 每个测试用例的第二行为 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 10^9$),表示数组的元素。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一个整数 $k$,表示将数组排序所需的最小操作次数。如果无法通过上述操作将数组排序,输出 $-1$。

说明/提示

在示例的第一个测试用例中,要将数组 $[3, 2, 1, 5, 4]$ 排序,需要进行 $3$ 次操作: - 移位操作,得到数组 $[4, 3, 2, 1, 5]$; - 再次移位操作,得到数组 $[5, 4, 3, 2, 1]$; - 反转操作,得到数组 $[1, 2, 3, 4, 5]$。 在示例的第三个测试用例中,可以证明无法通过给定的操作将数组排序。 在示例的第七个测试用例中,要将数组 $[4, 1, 3, 4, 4]$ 排序,需要进行 $3$ 次操作: - 反转操作,得到数组 $[4, 4, 3, 1, 4]$; - 移位操作,得到数组 $[4, 4, 4, 3, 1]$; - 反转操作,得到数组 $[1, 3, 4, 4, 4]$。 由 ChatGPT 4.1 翻译