#P14232. [COI 2011] 排序 / SORT

    ID: 16041 远端评测题 1000ms 64MiB 尝试: 0 已通过: 0 难度: 4 上传者: 标签>2011Special Judge排序构造COI(克罗地亚)

[COI 2011] 排序 / SORT

题目背景

译自 COI 2011 T1

题目描述

为了将工厂中的工作自动化,Mirko 希望利用一台老旧的分拣机器人来整理箱子。工厂中有 NN 个箱子,编号分别为 11NN 的不同整数,需要按照编号升序排列。

这台分拣机器人只能执行一种特定操作:对于给定的一组不同位置,机器人会循环移动这些位置上的箱子。例如,如果初始箱子顺序为 [4,1,5,2,3][4, 1, 5, 2, 3],而 Mirko 向机器人发出指令 [2,1,3][2, 1, 3],则机器人会将位置 22 的箱子移到位置 11,位置 11 的箱子移到位置 33,位置 33 的箱子移到位置 22。操作后的箱子顺序将变为 [1,5,4,2,3][1, 5, 4, 2, 3]

请编写一个程序,设计必要的指令,使得机器人能够用最少的操作次数将给定的箱子序列排序。在此过程中,单次操作的长度(即需要循环移动的位置数量)并不重要。

输入格式

第一行输入一个整数 NN (2N1000)(2 \le N \le 1000),表示仓库中的箱子数量。

第二行包含 NN 个不同的正整数,按顺序表示箱子的初始顺序标签。

输出格式

第一行输出一个整数 XX,表示所需的最少操作次数。

接下来的 XX 行每行描述一次操作:首先输出一个正整数表示该操作涉及的位置总数,接着是一个 : 字符、一个空格,然后按顺序列出需要循环移动的位置,各位置之间用一个空格分隔。

注意:解不一定唯一。如果存在多个可能的解,输出其中任意一个即可。

3 
3 2 1
1
2: 3 1
5 
2 3 1 5 4
2 
3: 1 2 3 
2: 5 4 
5 
1 2 3 4 5

0

提示

如果程序在某个测试用例中的操作次数不超过 10001000 但也并非最少的,只要能够正确排序就可以获得该测试点 50%50\% 的分数。