Grooving Monkeys
Grooving Monkeys
N
monkeys are invited to a party where they start dancing. They dance in a circular formation, very similar to a Gujarati Garba or a Drum Circle. The dance requires the monkeys to constantly change positions after every 1
second.
The change of position is not random & you, in the audience, observe a pattern. Monkeys are very disciplined & follow a specific pattern while dancing.
Consider N = 6
, and an array monkeys = {3,6,5,4,1,2}
.
This array (1-indexed) is the dancing pattern. The value at monkeys[i]
, indicates the new of position of the monkey who is standing at the ith
position.
Given N
& the array monkeys[ ]
, find the time after which all monkeys are in the initial positions for the 1st time.
Constraints
1<=t<=10
(test cases)1<=N<=10000
(Number of monkeys)
Input Format
- First line contains single integer
t
, denoting the number of test cases.Each test case is as follows: - Integer
N
denoting the number of monkeys. - Next line contains
N
integer denoting the dancing pattern array,monkeys[]
.
Output
t
lines- Each line must contain a single integer
S
, whereS
is the minimum number of seconds after which all the monkeys are in their initial position.
Example Input 1
1 6 3 6 5 4 1 2
Output
6
Explanation
- Consider
N = 6
, and an arraymonkeys = {3,6,5,4,1,2}
- Suppose monkeys are
a,b,c,d,e,f
& Initial position (att = 0
) ->a,b,c,d,e,f
- At
t = 1 -> e,f,a,d,c,b
,a
will move to 3rd position,b
will move to 6th position,c
will move to 5th position,d
will move to 4th position,e
will move to 1st position andf
will move to 2nd position. - Thus from
a,b,c,d,e,f
att =0
, we gete,f,a,d,c,b
at t =1. Recursively applying same transpositions, we get following positions for different values of t. - At
t = 2 -> c,b,e,d,a,f
- At
t = 3 -> a,f,c,d,e,b
- At
t = 4 -> e,b,a,d,c,f
- At
t = 5 -> c,f,e,d,a,b
- At
t = 6 -> a,b,c,d,e,f
Since at t = 6
, we got the original position, therefore the answer is 6
.
N
monkeys are invited to a party where they start dancing. They dance in a circular formation, very similar to a Gujarati Garba or a Drum Circle. The dance requires the monkeys to constantly change positions after every 1
second.
The change of position is not random & you, in the audience, observe a pattern. Monkeys are very disciplined & follow a specific pattern while dancing.
Consider N = 6
, and an array monkeys = {3,6,5,4,1,2}
.
This array (1-indexed) is the dancing pattern. The value at monkeys[i]
, indicates the new of position of the monkey who is standing at the ith
position.
Given N
& the array monkeys[ ]
, find the time after which all monkeys are in the initial positions for the 1st time.
Constraints
1<=t<=10
(test cases)1<=N<=10000
(Number of monkeys)
Input Format
- First line contains single integer
t
, denoting the number of test cases.Each test case is as follows: - Integer
N
denoting the number of monkeys. - Next line contains
N
integer denoting the dancing pattern array,monkeys[]
.
Output
t
lines- Each line must contain a single integer
S
, whereS
is the minimum number of seconds after which all the monkeys are in their initial position.
Example Input 1
1 6 3 6 5 4 1 2
Output
6
Explanation
- Consider
N = 6
, and an arraymonkeys = {3,6,5,4,1,2}
- Suppose monkeys are
a,b,c,d,e,f
& Initial position (att = 0
) ->a,b,c,d,e,f
- At
t = 1 -> e,f,a,d,c,b
,a
will move to 3rd position,b
will move to 6th position,c
will move to 5th position,d
will move to 4th position,e
will move to 1st position andf
will move to 2nd position. - Thus from
a,b,c,d,e,f
att =0
, we gete,f,a,d,c,b
at t =1. Recursively applying same transpositions, we get following positions for different values of t. - At
t = 2 -> c,b,e,d,a,f
- At
t = 3 -> a,f,c,d,e,b
- At
t = 4 -> e,b,a,d,c,f
- At
t = 5 -> c,f,e,d,a,b
- At
t = 6 -> a,b,c,d,e,f
Since at t = 6
, we got the original position, therefore the answer is 6
.
Solution:
from math import gcd
def lcm(x,y):
return(int((x*y)/gcd(x,y)))
T=int(input())
while(T):
T=T-1
n=int(input())
m=list(map(int,input().split()))
t=1
for p in range(n):
c=0
while(m[p]!=0):
h=p
p=m[p]-1
m[h]=0
c+=1
if(c!=0):
t=lcm(t,c)
print(int(t))
Comments
Post a Comment