CF1558C.Bottom-Tier Reversals
普及+/提高
通过率:0%
时间限制:2.00s
内存限制:512MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You have a permutation: an array a=[a1,a2,…,an] of distinct integers from 1 to n. The length of the permutation n is odd.
You need to sort the permutation in increasing order.
In one step, you can choose any prefix of the permutation with an odd length and reverse it. Formally, if a=[a1,a2,…,an], you can choose any odd integer p between 1 and n, inclusive, and set a to [ap,ap−1,…,a1,ap+1,ap+2,…,an].
Find a way to sort a using no more than 25n reversals of the above kind, or determine that such a way doesn't exist. The number of reversals doesn't have to be minimized.
你有一个排列:一个由 1 到 n 的互异整数组成的数组 a=[a1,a2,…,an]。该排列的长度 n 为奇数。
你需要将该排列按升序排序。
在每一步操作中,你可以选择任意一个长度为奇数的前缀并将其翻转。形式化地说,若 a=[a1,a2,…,an],则你可以任选一个介于 1 与 n(含端点)之间的奇数 p,并将 a 变为 [ap,ap−1,…,a1,ap+1,ap+2,…,an]。
请找出一种方法,在至多 25n 次上述翻转操作内将 a 排序;若不存在这样的方法,则判定其不存在。操作次数无需最小化。
输入格式
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤100). Description of the test cases follows.
The first line of each test case contains a single integer n (3≤n≤2021; n is odd) — the length of the permutation.
The second line contains n distinct integers a1,a2,…,an (1≤ai≤n) — the permutation itself.
It is guaranteed that the sum of n over all test cases does not exceed 2021.
每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤100)。随后是测试用例的描述。
每个测试用例的第一行包含一个整数 n(3≤n≤2021;n 为奇数)—— 排列的长度。
第二行包含 n 个互不相同的整数 a1,a2,…,an(1≤ai≤n)—— 排列本身。
保证所有测试用例的 n 之和不超过 2021。
输出格式
For each test case, if it's impossible to sort the given permutation in at most 25n reversals, print a single integer −1.
Otherwise, print an integer m (0≤m≤25n), denoting the number of reversals in your sequence of steps, followed by m integers pi (1≤pi≤n; pi is odd), denoting the lengths of the prefixes of a to be reversed, in chronological order.
Note that m doesn't have to be minimized. If there are multiple answers, print any.
对于每个测试用例,如果无法在至多 25n 次翻转操作内将给定的排列排序,则输出单个整数 −1。
否则,首先输出一个整数 m(0≤m≤25n),表示你所构造的操作序列中翻转操作的次数;随后输出 m 个整数 pi(1≤pi≤n,且每个 pi 均为奇数),按时间顺序表示每次需翻转的数组 a 的前缀长度。
注意:m 不必最小化。若存在多种可行答案,输出任意一种即可。
输入输出样例
输入#1
3 3 1 2 3 5 3 4 5 2 1 3 2 1 3
输出#1
4 3 3 3 3 2 3 5 -1
说明/提示
In the first test case, the permutation is already sorted. Any even number of reversals of the length 3 prefix doesn't change that fact.
In the second test case, after reversing the prefix of length 3 the permutation will change to [5,4,3,2,1], and then after reversing the prefix of length 5 the permutation will change to [1,2,3,4,5].
In the third test case, it's impossible to sort the permutation.
在第一个测试用例中,排列已经是有序的。对长度为 3 的前缀执行任意偶数次翻转操作都不会改变这一事实。
在第二个测试用例中,先对长度为 3 的前缀进行翻转,排列变为 [5,4,3,2,1];再对长度为 5 的前缀进行翻转,排列变为 [1,2,3,4,5]。
在第三个测试用例中,无法将该排列排序。
输入解题思路,AI测评打分。不知道怎么写?