每日一题——第一期(越越的任务)

【题目描述】

越越希望争得勇敢头衔。国王知道骑士不仅勇敢,还需要足够聪明。所以他要求越越解决以下任务。
给定一个由1到2n的数字组成的排列p。你可以进行两种类型的操作。
▪ 交换p1和p2,p3和p4, …, P2n-1和p2n。
▪交换p1和Pn+1,p2和pn+2,…,Pn和p2n。
任务是找出对给定排列进行排序所需的最少操作次数。
你想争得勇士的头衔吗?你也来试试吧。


【输入描述】

第一行包含整数n(1≤n≤1000)。
第二行包含2n个整数,即从1到2n的数字排列,表示p。
 

【输出描述】

打印一个整数,表示对排列进行排序所需的最少操作次数。
如果使用这些操作无法对排列进行排序,则打印-1。
 

【样例1】

【样例输入】

3
6 3 2 5 4 1
 

【样例输出】

3

【样例解释】

在第一个示例中,你可以通过三个操作将排列排序:

进行操作 11:3,6,5,2,1,43,6,5,2,1,4。

进行操作 22:2,1,4,3,6,52,1,4,3,6,5。

进行操作 11:1,2,3,4,5,61,2,3,4,5,6。

【样例2】

【样例输入】

2
3 4 2 1

【样例输出】

-1

【样例3】

【样例输入】

4
1 2 3 4 5 6 7 8

【样例输出】

0

【数据范围及描述】

对于 20%的数据:1≤n≤10;

对于 100%的数据:1≤n≤1000;

【大数据】

ex_task1.in  ex_task1.out  ex_task2.in  ex_task2.out  ex_task3.in  ex_task3.out  ex_task4.in  ex_task4.out  

你可能感兴趣的:(每日一题,c++)