結果

問題 No.3062 Rotate and Maximize
ユーザー 👑 rin204
提出日時 2025-02-26 21:43:44
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 192 ms / 2,000 ms
コード長 809 bytes
コンパイル時間 335 ms
コンパイル使用メモリ 82,432 KB
実行使用メモリ 68,732 KB
最終ジャッジ日時 2025-03-12 00:52:14
合計ジャッジ時間 6,362 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 51
権限があれば一括ダウンロードができます

ソースコード

diff #

MOD = 998244353

n = int(input())
A = [a - 1 for a in map(int, input().split())]
n_pos = []
for i, a in enumerate(A):
    if a == n - 1:
        n_pos.append(i)

if not n_pos:
    print(0)
    exit()

mi = [n] * n
mi_cnt = [0] * n
ac = [0] * n
for i, a in enumerate(A):
    ac[a] += 1
    for d in n_pos:
        p = (i - d) % n
        if a < mi[p]:
            mi[p] = a
            mi_cnt[p] = 1
        elif a == mi[p]:
            mi_cnt[p] += 1

cnt = [0] * n
cnt2 = [0] * n
for i in range(n):
    cnt[mi[i]] += 1
    if mi_cnt[i] == ac[mi[i]]:
        cnt2[mi[i]] += 1

ans = 1
tot = 0
for i in range(n - 1, -1, -1):
    tot += cnt[i]
    if i == n - 1:
        pass
    elif ac[i]:
        ans = ans * cnt2[i] % MOD
    else:
        ans = ans * tot % MOD
    tot -= 1

ans = ans * n % MOD
print(ans)
0