結果
問題 |
No.2428 Returning Shuffle
|
ユーザー |
|
提出日時 | 2025-06-29 01:37:53 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 776 ms / 2,000 ms |
コード長 | 1,879 bytes |
コンパイル時間 | 425 ms |
コンパイル使用メモリ | 82,648 KB |
実行使用メモリ | 260,972 KB |
最終ジャッジ日時 | 2025-06-29 01:38:01 |
合計ジャッジ時間 | 7,027 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
## https://yukicoder.me/problems/no/2428 MOD = 998244353 def main(): N, M = map(int, input().split()) move_maps = [] for _ in range(M): values = list(map(int, input().split())) array = values[1:] move_maps.append(array) array = [i for i in range(N)] for move_map in move_maps: tmp0 = -1 for i in reversed(range(len(move_map))): f = move_map[i] - 1 t = move_map[(i + 1) % len(move_map)] - 1 if i == len(move_map) - 1: tmp0 = array[t] array[t] = array[f] elif i > 0: array[t] = array[f] else: array[t] = tmp0 passed = [False] * N l_array = set() for i in range(N): if not passed[i]: passed[i] = True l = 1 n = array[i] while n != i: passed[n] = True l += 1 n = array[n] l_array.add(l) primes = [i for i in range(N + 1)] for p in range(2, N + 1): if primes[p] != p: continue x = 2 * p while x <= N: if primes[x] == x: primes[x] = p x += p max_primes = {} for l in l_array: m_primes = {} while l > 1: p = primes[l] if p not in m_primes: m_primes[p] = 0 m_primes[p] += 1 l //= p for p, value in m_primes.items(): if p not in max_primes: max_primes[p] = value else: max_primes[p] = max(max_primes[p], value) answer = 1 for p, value in max_primes.items(): answer *= pow(p, value, MOD) answer %= MOD print(answer) if __name__ == "__main__": main()