結果

問題 No.3062 Rotate and Maximize
ユーザー 👑 SPD_9X2
提出日時 2025-03-01 17:54:41
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,159 bytes
コンパイル時間 393 ms
コンパイル使用メモリ 82,408 KB
実行使用メモリ 85,212 KB
最終ジャッジ日時 2025-03-12 00:52:23
合計ジャッジ時間 11,916 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 38 WA * 13
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

"""
https://yukicoder.me/problems/12000
shift
2
32
---
A0
P[0] = N NOK
A[i] = max(P[a],P[b],P[c]...P[k])
xA[i]=x
A
---
2
2 2
4
"""
import sys
from sys import stdin
mod = 998244353
N = int(stdin.readline())
A = list(map(int,stdin.readline().split()))
for i in range(N):
A[i] -= 1
ks = []
for i in range(N):
if A[i] == N-1:
ks.append(i)
# P[i]
M = [N-1] * N
for i in range(N):
for k in ks:
M[(i-k)%N] = min(M[(i-k)%N],A[i])
#
adic = {}
for i in range(N):
if A[i] not in adic:
adic[A[i]] = 0
adic[A[i]] += 1
C = [ {} for i in range(N) ]
for i in range(N):
for k in ks:
if (i-k)%N not in C[A[i]]:
C[A[i]][(i-k)%N] = 0
C[A[i]][(i-k)%N] += 1
D = [ [] for i in range(N) ]
for na in range(N):
for pos in C[na]:
flag = True
if C[na][pos] != adic[na]:
flag = False
if M[pos] < na:
flag = False
if flag and pos != 0:
D[na].append(pos)
D[-1] = [0]
exist = set()
for na in range(N):
for x in D[na]:
exist.add(x)
ans = 1
free = N - len(exist)
for na in range(N-1,-1,-1):
if na not in adic:
ans *= free
free -= 1
ans %= mod
else:
ans *= len(D[na])
free += len(D[na])-1
ans %= mod
print (ans * N % mod)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0