結果
問題 |
No.2336 Do you like typical problems?
|
ユーザー |
![]() |
提出日時 | 2025-03-26 16:00:39 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,840 ms / 2,000 ms |
コード長 | 2,388 bytes |
コンパイル時間 | 307 ms |
コンパイル使用メモリ | 82,240 KB |
実行使用メモリ | 189,896 KB |
最終ジャッジ日時 | 2025-03-26 16:01:34 |
合計ジャッジ時間 | 13,580 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 18 |
ソースコード
MOD = 998244353 def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 intervals = [] for _ in range(N): B = int(input[idx]) C = int(input[idx+1]) idx += 2 intervals.append((B, C)) # Compute factorial of N mod MOD factorial_N = 1 for i in range(2, N+1): factorial_N = factorial_N * i % MOD inv_2 = (MOD + 1) // 2 # 499122177 # Precompute inv_len and inv_len_sq for each interval events = dict() for B, C in intervals: L = B R = C len_i = R - L + 1 inv_len = pow(len_i, MOD-2, MOD) inv_len_sq = inv_len * inv_len % MOD # Event for B (start) x = L delta_S = inv_len delta_T = inv_len_sq if x not in events: events[x] = [0, 0] events[x][0] = (events[x][0] + delta_S) % MOD events[x][1] = (events[x][1] + delta_T) % MOD # Event for C+1 (end) x = C + 1 delta_S = (-inv_len) % MOD delta_T = (-inv_len_sq) % MOD if x not in events: events[x] = [0, 0] events[x][0] = (events[x][0] + delta_S) % MOD events[x][1] = (events[x][1] + delta_T) % MOD # Sort events by x sorted_events = sorted(events.items()) sum_total = 0 prev_x = 0 current_S = 0 current_T = 0 for x, (delta_S, delta_T) in sorted_events: if x > prev_x: length = x - prev_x # Compute contribution for [prev_x, x) S_sq = current_S * current_S % MOD S_sq_minus_T = (S_sq - current_T) % MOD contribution = S_sq_minus_T * inv_2 % MOD contribution = contribution * length % MOD sum_total = (sum_total + contribution) % MOD # Apply deltas current_S = (current_S + delta_S) % MOD current_T = (current_T + delta_T) % MOD prev_x = x # Compute term = N*(N-1)/2 mod MOD if N < 2: term = 0 else: term = (N % MOD) * ((N-1) % MOD) % MOD term = term * inv_2 % MOD sum_part = (term - sum_total) % MOD # Answer is (factorial_N * inv_2) * sum_part mod MOD factor = factorial_N * inv_2 % MOD answer = factor * sum_part % MOD print(answer) if __name__ == "__main__": main()