結果

問題 No.3123 Inversion
ユーザー Samibare
提出日時 2025-04-19 04:01:09
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
MLE  
実行時間 -
コード長 1,118 bytes
コンパイル時間 449 ms
コンパイル使用メモリ 12,416 KB
実行使用メモリ 817,508 KB
最終ジャッジ日時 2025-04-19 04:01:18
合計ジャッジ時間 9,020 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 1
other MLE * 1 -- * 20
権限があれば一括ダウンロードができます

ソースコード

diff #

import itertools
from collections import deque

def inverse_perm(p):
    inv = [0] * len(p)
    for i, val in enumerate(p):
        inv[val - 1] = i + 1
    return tuple(inv)

def reverse_perm(p):
    return tuple(reversed(p))

def generate_orbit(p):
    visited = set()
    queue = deque([p])
    while queue:
        current = queue.popleft()
        if current in visited:
            continue
        visited.add(current)
        inv = inverse_perm(current)
        rev = reverse_perm(current)
        if inv not in visited:
            queue.append(inv)
        if rev not in visited:
            queue.append(rev)
    return visited

def total_score_modulo(n, m):
    perms = list(itertools.permutations(range(1, n + 1)))
    visited_global = set()
    total = 0
    for p in perms:
        if p in visited_global:
            continue
        orbit = generate_orbit(p)
        orbit_size = len(orbit)
        total += orbit_size * len(orbit)
        visited_global.update(orbit)
    return total % m


T, M = map(int, input().split())
for _ in range(T):
    N = int(input())
    print(total_score_modulo(N, M))
0