#LC2404. 数学课上的囚徒问题(1)
数学课上的囚徒问题(1)
题目描述
又是一节数学课,数学老师说了一个非常反直觉的数学谜题:
我们假设存在 个编号从 到 的囚徒,我们把包含每个人号码的纸条随机放置在一个密闭房间的 个盒子中,每次只准进入一个囚徒,他可以打开 个盒子中的任意 个寻找自己的号码,之后必须原封不动的出去,并且不能和其他人交流。如果他们都找到了自己的号码,则都可以获得自由,但如果有一个人没找到,那么都要接受惩罚。但他们可以在进入房间前商量策略。现在我们的目的就是找出最优策略。
你绞尽脑汁无从下脑,老师说出了最优策略:"囚徒进去房间后,先找与自己编号一样的箱号,打开后如果不是自己的编号,则按箱号的字条去找下一个箱号,重复这个流程直到找到自己的编号后停止。"你仍是一知半解,不过你知道了每个编号肯定在这样一个编号循环节里面。现在老师给了你 个箱子,每个箱子里面有一个纸条编号 ,为了理解这个策略,你需要尝试从中找出最短和最长的编号循环节长度。请你编写一段程序试试看。
输入格式
第一行一个整数 ,表示箱子的数量。
第二行是一个从 开始计数的长度为 的排列 。 号箱子里存放的号码是 。
长度为 的排列是一个长度为 的,包含以任意顺序排列,互不相同的 到 数字的数组。例如: 是排列,但 不是排列,因为 出现了两次。 同样不是排列,因为 但是出现了 ,并且没有出现 。
输出格式
输出一行两个整数 ,分别表示最短和最长的编号循环节长度。
样例
4
1 3 4 2
1 3
2
1 2
1 1
样例解释
样例 解释:
第一个箱子里是编号 ,所以自己指向自己,构成长度为 的编号循环节。
第二个箱子里是编号 ,指向第三个箱子,第三个箱子里是编号 ,指向第四个箱子,第四个箱子里面是编号 ,指向第二箱子,所以这三个箱子构成一个长度为 的编号循环节。