#LC2404. 数学课上的囚徒问题(1)

    ID: 1444 传统题 1000ms 256MiB 尝试: 7 已通过: 4 难度: 10 上传者: 标签>第六届山东师范大学与齐鲁工业大学大学生程序设计联赛

数学课上的囚徒问题(1)

题目描述

又是一节数学课,数学老师说了一个非常反直觉的数学谜题:

我们假设存在 NN 个编号从 11NN 的囚徒,我们把包含每个人号码的纸条随机放置在一个密闭房间的 NN 个盒子中,每次只准进入一个囚徒,他可以打开 NN 个盒子中的任意 N2\frac{N}{2} 个寻找自己的号码,之后必须原封不动的出去,并且不能和其他人交流。如果他们都找到了自己的号码,则都可以获得自由,但如果有一个人没找到,那么都要接受惩罚。但他们可以在进入房间前商量策略。现在我们的目的就是找出最优策略。

你绞尽脑汁无从下脑,老师说出了最优策略:"囚徒进去房间后,先找与自己编号一样的箱号,打开后如果不是自己的编号,则按箱号的字条去找下一个箱号,重复这个流程直到找到自己的编号后停止。"你仍是一知半解,不过你知道了每个编号肯定在这样一个编号循环节里面。现在老师给了你 NN 个箱子,每个箱子里面有一个纸条编号 aia_i ,为了理解这个策略,你需要尝试从中找出最短和最长的编号循环节长度。请你编写一段程序试试看。

输入格式

第一行一个整数 NN (1N5000)(1 \leq N \leq 5000) ,表示箱子的数量。

第二行是一个从 11 开始计数的长度为 NN 的排列 AAii 号箱子里存放的号码是 AiA_i

长度为 nn 的排列是一个长度为 nn 的,包含以任意顺序排列,互不相同的 11nn 数字的数组。例如: [2,3,1,5,4][2,3,1,5,4] 是排列,但 [1,2,2][1,2,2] 不是排列,因为 22 出现了两次。 [1,3,4][1,3,4] 同样不是排列,因为 n=3n=3 但是出现了 44 ,并且没有出现 22

输出格式

输出一行两个整数 mnmxmn \enspace mx ,分别表示最短和最长的编号循环节长度。

样例

4
1 3 4 2
1 3
2
1 2
1 1

样例解释

样例 11 解释:

第一个箱子里是编号 11 ,所以自己指向自己,构成长度为 11 的编号循环节。

第二个箱子里是编号 33 ,指向第三个箱子,第三个箱子里是编号 44 ,指向第四个箱子,第四个箱子里面是编号 22 ,指向第二箱子,所以这三个箱子构成一个长度为 33 的编号循环节。