結果
| 問題 |
No.986 Present
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-31 17:52:34 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 62 ms / 2,000 ms |
| コード長 | 1,451 bytes |
| コンパイル時間 | 399 ms |
| コンパイル使用メモリ | 82,120 KB |
| 実行使用メモリ | 68,608 KB |
| 最終ジャッジ日時 | 2025-03-31 17:53:10 |
| 合計ジャッジ時間 | 3,558 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 30 |
ソースコード
MOD = 998244353
max_size = 200000
# Precompute pow2: pow2[i] = 2^i % MOD
pow2 = [1] * (max_size + 2)
for i in range(1, max_size + 1):
pow2[i] = (pow2[i-1] * 2) % MOD
# Precompute factorial and inverse factorial
fact = [1] * (max_size + 2)
for i in range(1, max_size + 1):
fact[i] = fact[i-1] * i % MOD
inv_fact = [1] * (max_size + 2)
inv_fact[max_size] = pow(fact[max_size], MOD-2, MOD)
for i in range(max_size-1, -1, -1):
inv_fact[i] = inv_fact[i+1] * (i+1) % MOD
# Precompute denominator product for Gaussian binomial coefficient
denom_prod = [1] * (max_size + 2)
for i in range(1, max_size + 1):
term = (pow2[i] - 1) % MOD
denom_prod[i] = denom_prod[i-1] * term % MOD
# Read input
N, M = map(int, input().split())
# Compute A: 2^N mod MOD
A = pow(2, N, MOD)
# Compute pow_sum = 2^(N*(N-1)/2) mod MOD
exponent = N * (N - 1) // 2
pow_sum = pow(2, exponent, MOD)
# Compute product_part: product of (2^d - 1) for d from a to M (inclusive)
a = M - N + 1
product_part = 1
if a <= M:
for d in range(a, M + 1):
product_part = product_part * (pow2[d] - 1) % MOD
else:
# Only when N=0, but per input constraints N >=1
pass
# Second answer
total_p = (pow_sum * product_part) % MOD
second_answer = (total_p * inv_fact[N]) % MOD
# Third answer
denominator = denom_prod[N]
inv_denominator = pow(denominator, MOD-2, MOD)
third_answer = (product_part * inv_denominator) % MOD
print(A, second_answer, third_answer)
lam6er