結果
問題 |
No.986 Present
|
ユーザー |
![]() |
提出日時 | 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)