#2589. 换位置游戏(慈溪2014第2题)

换位置游戏(慈溪2014第2题)

Description

        N 个小朋友(编号为1 到N)正在玩一个换位置游戏。从左到右依次排列着N 个凳子(编号为1 到N,最左边的为1 号凳子,最右边的为N 号凳子),每个凳子上都有一个数字(凳脚处红色数字),每个数字互不相同,且都是不超过N 的正整数。
        游戏开始前,1 号小朋友坐在1 号凳子上,2 号小朋友坐在2 号凳子上,然后依次下去,N 号小朋友坐在N 号凳子上。比如当N=4 时,游戏开始前小朋友们坐凳子的状态如下图1所示:

图1 游戏开始前4 位小朋友坐凳子的状态
        坐定后,游戏开始。每位小朋友看一下自己坐的凳子凳脚处的数字,然后根据这个数字找到相应号码的凳子。比如上面的例子,1 号小朋友凳脚处数字是3,所以他到3 号凳子上坐下,2 号小朋友凳脚处数字是1,所以他到1 号凳子坐下,3 号小朋友凳脚处数字是2,所以他到2 号凳子坐下,4 号小朋友凳脚处数字是4,所以他到4 号凳子坐下。经过一轮换位置以后,4 个小朋友坐凳子的状态如下图2 所示:

图2 经过第1 轮换位置后小朋友们坐凳子的状态
        坐定后,每位小朋友再看一下自己凳脚的数字,按照凳脚的数字再继续换位置,第二轮换位置的结果如下图3 所示:

图3 经过第2 轮换位置后小朋友们坐凳子的状态
        坐定后,每位小朋友再看一下自己凳脚的数字,按照凳脚的数字再继续换位置,第三轮换位置的结果如下图4 所示:

图4 经过第3 轮换位置后小朋友们坐凳子的状态
        当第三轮换位置结束后,发现每.位.小.朋.友.又.各.自.坐.到.了.游.戏.开.始.前.的.位.置.上.,.此.时.游.戏.结.束.。
        从上面的过程我们可以发现,从游戏开始经过3 轮换位置后又回到了游戏开始前坐凳子的状态,但当N 很大的时候,这个换位置过程非常复杂,请编程帮忙计算一下最少需要经过多少轮换位置才能回到游戏开始前坐凳子的状态。

Input Format

输入文件move.in:输入从文件中读取,输入共2 行。
第1 行是一个整数N(1≤N≤1000),表示参加游戏的小朋友人数,当然也表示凳子的数目。
第2 行N 个互不相同的正整数Ki(1≤Ki≤N,且1≤i≤N),Ki 表示第i 把凳子凳脚处的数字。

Output Format

输出文件move.out:结果输出到文件中,输出共1 行。
表示小朋友们通过换位置后回到游戏开始前坐凳子的状态最.少.需要经过多少轮。测试数据保证输出的结果不超出20000000。
3
1 2 3
1

Hint

【样例1 解释】 
输入有3 把凳子。1 号凳子凳脚处的数字为1,2 号凳子凳脚处的数字为2,3 号凳子凳 脚处的数字为3。第1 轮换位置后,1 号小朋友仍然坐在1 号凳子上,2 号小朋友仍然坐在2 号凳子上,3 号小朋友仍然坐在3 号凳子上。所以经过1 轮就回到了游戏开始前状态。
【输入输出样例2】 
move.in 
 5 
2 3 4 5 1 
move.out 

【样例2 解释】 
游戏中有5 个小朋友5 把凳子,1 到5 号凳子凳脚处的数字依次为:2 3 4 5 1。 
第1 轮换位置后,1 到5 号凳子上小朋友的编号为:5 1 2 3 4 
第2 轮换位置后,1 到5 号凳子上小朋友的编号为:4 5 1 2 3 
第3 轮换位置后,1 到5 号凳子上小朋友的编号为:3 4 5 1 2 
第4 轮换位置后,1 到5 号凳子上小朋友的编号为:2 3 4 5 1 
第5 轮换位置后,1 到5 号凳子上小朋友的编号为:1 2 3 4 5 
【数据范围约定】 
对于60%的数据,1≤N≤500,且最少需要交换的轮数不超过10000。 对于100%的数据,1≤N≤1000,且最少需要交换的轮数不超过20000000。

Source

模拟