Problem K. 你说的对,但是不给你吃
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
Problem K. 你说的对,但是不给你吃
题目背景
在一个古老的帝国中,皇帝为了确保所有人民都得到适合自己身份的食物,设立了一个特别的分配系统。在这个系统中,食物被分为不同的等级,每个等级代表着不同的社会阶层。皇帝希望每个人都能获得与他们身份相匹配的食物,以维持帝国的和谐与秩序。
题目描述
作为帝国的首席分配官,zms 面临着一个复杂的挑战。有一系列的食物,每种食物被分配了一个等级,代表着它适合的社会阶层。这些食物等级构成了一个长度为 的排列 ,包含从 到 的 个不同等级,每个等级恰好出现一次。zms 的任务是通过一系列操作,将这些食物按等级从低到高顺序重新分配给不同阶层的人。
zms 可以依次进行以下操作:
- Divide:将这个食物等级排列分割 次,使得其变为 个子序列(每个子序列至少包含一个食物等级,也可以选择不分,保持原排列);
- Reverse:选择其中一些食物等级子序列,并将它们倒转(即将子序列中的食物等级顺序颠倒);
- Combine:将这些食物等级子序列按照你的意愿重新组合拼接,形成一个新的排列。
请你帮助 zms 找出在第一步(Divide)最少需要分割多少次,才能通过上述操作将原排列变为按等级从低到高的有序状态。
输入格式
第一行包含一个整数 ),表示排列 的长度。
第二行包含 个整数,其中第 个整数定义为 。保证输入的 一定是长度为 的排列。
输出格式
输出一个整数,表示将排列 变得有序所需的最少分割(Divide)次数 。
样例数据 #1
5
1 2 3 5 4
1
样例数据 #2
3
3 2 1
0
数据范围与约定
。保证每个 恰好出现一次。
注意
- 分割的子序列是 连续 的。
- 操作必须依次进行,即先使用若干 Divide,再使用若干 Reverse,再使用若干 Combine。
- 若希望使用 Divide 将序列拆分为 个子序列,则必须使用 次 Divide 操作。
在样例 1 中,以下是一种可行方法:
- 使用 1 次 Divide,拆分为 [1 2 3],[5 4]
- 接下来使用 Reverse,将第二个子序列翻转为 [1 2 3], [4 5]
- 接下来使用 Combine,将子序列拼接为 [1 2 3 4 5]。
- 因此,需要进行的 Divide 的最少次数是 1。
南京师范大学第九届互联网创新创业科技节计算机程序设计大赛
- 状态
- 已结束
- 规则
- ACM/ICPC
- 题目
- 13
- 开始于
- 2024-3-20 17:40
- 结束于
- 2024-3-20 20:10
- 持续时间
- 2.5 小时
- 主持人
- 参赛人数
- 133