結果
問題 |
No.1510 Simple Integral
|
ユーザー |
![]() |
提出日時 | 2025-06-12 16:07:22 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,134 bytes |
コンパイル時間 | 238 ms |
コンパイル使用メモリ | 82,192 KB |
実行使用メモリ | 67,364 KB |
最終ジャッジ日時 | 2025-06-12 16:07:26 |
合計ジャッジ時間 | 3,408 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 WA * 30 |
ソースコード
MOD = 998244353 def main(): import sys input = sys.stdin.read().split() N = int(input[0]) A = list(map(int, input[1:N+1])) # Precompute factorial and inverse factorial up to 200 max_fact = 200 fact = [1] * (max_fact + 1) for i in range(1, max_fact + 1): fact[i] = fact[i-1] * i % MOD inv_fact = [1] * (max_fact + 1) inv_fact[max_fact] = pow(fact[max_fact], MOD-2, MOD) for i in range(max_fact-1, -1, -1): inv_fact[i] = inv_fact[i+1] * (i+1) % MOD from collections import defaultdict freq = defaultdict(int) for a in A: freq[a] += 1 result = 0 for a in freq: k = freq[a] # Compute pow(2, 2-2k) exponent = (2 - 2 * k) % (MOD-1) pow_2 = pow(2, exponent, MOD) # Compute (2k-2)! if 2*k - 2 < 0: fact_2k_2 = 1 else: fact_2k_2 = fact[2*k - 2] # Compute inv_fact[k-1]^2 if k-1 < 0: inv_k_1 = 1 else: inv_k_1 = inv_fact[k-1] inv_k_1_sq = inv_k_1 * inv_k_1 % MOD # Compute sign (-1)^(k-1) sign = pow(MOD-1, k-1, MOD) # Compute numerator_part numerator_part = pow_2 * fact_2k_2 % MOD numerator_part = numerator_part * inv_k_1_sq % MOD numerator_part = numerator_part * sign % MOD # Compute denominator_part a_mod = a % MOD a_pow = pow(a_mod, 2*k - 1, MOD) product = 1 for b in freq: if b == a: continue b_mod = b % MOD term = (b_mod * b_mod - a_mod * a_mod) % MOD term_pow = pow(term, freq[b], MOD) product = product * term_pow % MOD denominator_part = a_pow * product % MOD # Compute inverse denominator if denominator_part == 0: print(0) return inv_denominator = pow(denominator_part, MOD-2, MOD) # Add to result term_a = numerator_part * inv_denominator % MOD result = (result + term_a) % MOD print(result) if __name__ == "__main__": main()