結果
問題 |
No.2875 What is My Rank?
|
ユーザー |
![]() |
提出日時 | 2024-09-06 22:15:31 |
言語 | Crystal (1.14.0) |
結果 |
AC
|
実行時間 | 106 ms / 2,000 ms |
コード長 | 700 bytes |
コンパイル時間 | 11,707 ms |
コンパイル使用メモリ | 297,120 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-06 22:16:39 |
合計ジャッジ時間 | 13,539 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 |
ソースコード
MOD = 998244353i64 def inv(v : Int64) pow(v, MOD - 2) end def pow(v : Int64, p) ret = 1i64 while p > 0 if (p & 1i64) != 0 ret *= v ret %= MOD end v *= v v %= MOD p >>= 1 end ret end n = read_line.to_i l0, r0 = read_line.split.map(&.to_i64) ans = 1i64 (n - 1).times do l1, r1 = read_line.split.map(&.to_i64) next if r1 <= l0 if r0 < l1 ans += 1 next end add = 0i64 if l0 < l1 add += (l1 - l0) * (r1 - l1 + 1) end lo = {l0, l1}.max hi = {r0, r1}.min add += ((r1 - lo) + (r1 - hi)) * (hi - lo + 1) // 2 add %= MOD add *= inv(r0 - l0 + 1) add %= MOD add *= inv(r1 - l1 + 1) add %= MOD ans += add end puts ans % MOD