#6584. B - 循环移位与反转
B - 循环移位与反转
当前没有测试数据。
B - 循环移位与反转
时间限制:2 秒 内存限制:1024 MiB 分值:400 分
【题目描述】
给定一个整数排列 , p_n,它是 的一个排列。
你可以对该排列进行任意次数、任意顺序的如下两种操作:
- 反转整个排列: 将 (p1,p2,…,pn)变为 (pn,pn−1,…,p1)
- 循环移位(把开头元素移到结尾): 将 (p1,p2,…,pn) 变为 (p2,p3,…,pn,p1)
保证通过若干次操作,可以把排列变为升序排列 (1,2,…,n)
请你求出所需的最少操作次数。
【输入格式】
n
p1 p2 … pn
【输出格式】
输出一个整数,表示将排列排序所需的最少操作次数。
【约束条件】
- p1,…,pn的一个排列
- 保证可以通过操作使其变为升序排列
【样例输入 1】
3
1 3 2
【样例输出 1】
2
解释:
- 先把第一个元素移到末尾 → 得到 (3,2,1)
- 再反转整个排列 → 得到 (1,2,3) 共需 2 步,且无法更少。
【样例输入 2】
2
2 1
【样例输出 2】
1
解释:做一次操作(反转或循环移位)即可排好。
【样例输入 3】
10
2 3 4 5 6 7 8 9 10 1
【样例输出 3】
3
解释:
- 反转 → (1,10,9,8,7,6,5,4,3,2)
- 移位 → (10,9,8,7,6,5,4,3,2,1)
- 再反转 → (1,2,3,4,5,6,7,8,9,10) 共需 3 步。
【样例输入 4】
12
1 2 3 4 5 6 7 8 9 10 11 12
【样例输出 4】
0
解释:已经有序,不需要操作。