結果
| 問題 |
No.2336 Do you like typical problems?
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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()
lam6er