結果
| 問題 |
No.2543 Many Meetings
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-11-14 01:51:41 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,635 ms / 2,000 ms |
| コード長 | 1,672 bytes |
| コンパイル時間 | 446 ms |
| コンパイル使用メモリ | 82,560 KB |
| 実行使用メモリ | 170,752 KB |
| 最終ジャッジ日時 | 2024-09-26 03:29:46 |
| 合計ジャッジ時間 | 33,299 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 40 |
ソースコード
def solve(n, k, LR):
inf = 2 ** 63 - 1
LR.sort()
next = [[0] * n for _ in range(21)]
d = []
for i in range(n):
d.append((LR[i][1], i))
d.append((LR[i][0], i + n))
d.sort(reverse=True)
toind = -1
for _, ind in d:
if ind < n:
next[0][ind] = toind
else:
ind -= n
if toind < 0 or LR[toind][1] > LR[ind][1]:
toind = ind
for i in range(20):
for j in range(n):
if next[i][j] == -1:
next[i + 1][j] = -1
else:
next[i + 1][j] = next[i][next[i][j]]
ans = inf
for i in range(n):
now = i
nowk = k - 1
for j in range(20):
if nowk % 2:
now = next[j][now]
nowk //= 2
if now >= 0:
x = LR[i][0]
y = LR[now][1]
ans = min(ans, y - x)
return ans if ans < inf else -1
def solve_gu(n, k, LR):
import itertools
ans = inf
for v in itertools.combinations(LR, k):
v = list(v)
v.sort(key = lambda x: x[1])
now = -1
f = True
for l, r in v:
if l < now:
f = False
now = r
if f:
ans = min(ans, v[-1][-1] - v[0][0])
return ans if ans < inf else -1
import sys, time, random
from collections import deque, Counter, defaultdict
input = lambda: sys.stdin.readline().rstrip()
ii = lambda: int(input())
mi = lambda: map(int, input().split())
li = lambda: list(mi())
inf = 2 ** 63 - 1
mod = 998244353
n, k = mi()
LR = [li() for _ in range(n)]
print(solve(n, k, LR))