Bogo Sort【置换群的循环节长度】

题目链接:https://ac.nowcoder.com/acm/contest/5670/E
要用到高精度,偷懒用python,但因为求 \(lcm\) 时没有用 \("//"\)(整数除法),一直不知道哪错了。

代码:

def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)


def lcm(a, b):
    return a * b // gcd(a, b)


maxn = int(1e5 + 5)
vis = [0] * maxn

n = int(input())
p = input()

p = "0 " + p
p = [int(i) for i in p.split()]

ans = int(1)
for i in range(1, n + 1):
    if vis[i]:
        continue
    cnt = 0
    a = i
    while vis[a] == 0:
        cnt = cnt + 1
        vis[a] = 1
        a = p[a]

    ans = lcm(ans, cnt)

print(int(ans))

猜你喜欢

转载自www.cnblogs.com/1024-xzx/p/13378149.html
今日推荐