結果
問題 |
No.2068 Restricted Permutation
|
ユーザー |
![]() |
提出日時 | 2025-06-12 16:59:52 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 52 ms / 2,000 ms |
コード長 | 1,954 bytes |
コンパイル時間 | 318 ms |
コンパイル使用メモリ | 82,100 KB |
実行使用メモリ | 68,236 KB |
最終ジャッジ日時 | 2025-06-12 16:59:58 |
合計ジャッジ時間 | 2,206 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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()