結果
| 問題 |
No.2068 Restricted Permutation
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 21:35:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 51 ms / 2,000 ms |
| コード長 | 1,954 bytes |
| コンパイル時間 | 283 ms |
| コンパイル使用メモリ | 82,268 KB |
| 実行使用メモリ | 68,300 KB |
| 最終ジャッジ日時 | 2025-06-12 21:38:20 |
| 合計ジャッジ時間 | 2,183 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 23 |
ソースコード
MOD = 998244353
def main():
import sys
input = sys.stdin.read
data = input().split()
N = int(data[0])
K = int(data[1])
X = int(data[2])
if N == 0:
print(0)
return
# Precompute factorials
max_n = N
fact = [1] * (max_n + 1)
for i in range(1, max_n + 1):
fact[i] = fact[i-1] * i % MOD
# Compute S and S1
# S = sum_{y=1, y!=X}^N (y-1 - delta) where delta = 1 if X < y
S = 0
for y in range(1, X):
S += (y - 1)
S %= MOD
for y in range(X+1, N+1):
S += (y - 2)
S %= MOD
# S1 = sum_{y=1, y!=X}^N (y-1) = (N*(N-1)//2) - (X-1)
S1 = N * (N - 1) // 2 % MOD
S1 = (S1 - (X - 1) % MOD) % MOD
total = 0
if N - 2 != 0:
inv = pow(N - 2, MOD - 2, MOD)
else:
inv = 0 # Not used when N-2 is 0
for i in range(1, N+1):
if i < K:
if N - 2 == 0:
if (i - 1) == 0:
current = fact[0] * S1 % MOD
else:
current = 0
else:
numerator = (i - 1) * S % MOD
term1 = S1 % MOD
term2 = numerator * inv % MOD
current = (term1 - term2) % MOD
current = current * fact[N-2] % MOD
current = current * fact[N - i] % MOD
elif i == K:
temp = (X - 1) % MOD
temp = temp * (N - K) % MOD
temp = temp * fact[N - 2] % MOD
temp = temp * fact[N - K] % MOD
current = temp
else:
current = S * (N - i) % MOD
if N >= 3:
current = current * fact[N - 3] % MOD
else:
current = current * 1 % MOD # fact[-1] is 1
current = current * fact[N - i] % MOD
total = (total + current) % MOD
print(total % MOD)
if __name__ == '__main__':
main()
gew1fw