結果

問題 No.3759 Watch Fireworks
コンテスト
ユーザー K2
提出日時 2026-10-09 23:07:29
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
WA  
実行時間 -
コード長 1,046 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 532 ms
コンパイル使用メモリ 82,148 KB
実行使用メモリ 303,040 KB
最終ジャッジ日時 2026-10-09 23:07:41
合計ジャッジ時間 8,366 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge5_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2 WA * 1
other AC * 8 WA * 18 RE * 21
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

N = int(input())
P = [tuple(map(int, input().split())) for _ in range(N)]
P = [(x + y, x - y) for x, y in P]

mi = min(P, key=lambda a: a[0])[0]
ma = max(P, key=lambda a: a[0])[0]

l = -1
r = 1 << 31

while r - l > 1:
    m = (l + r) // 2
    d = m / 2
    x1 = mi + d
    x2 = ma - d

    left = []
    both = []
    right = []
    ok = True
    for x, y in P:
        a = abs(x - x1) <= d
        b = abs(x - x2) <= d
        if a and b:
            both.append(y)
        elif a:
            left.append(y)
        elif b:
            right.append(y)
        else:
            ok = False
            break
    if not ok:
        l = m
        break

    y = (min(both) + d, max(both) - d)
    if left:
        y = y + (min(left) + d, max(left) - d)

    for y1 in y:
        if left and (abs(y1 - min(left)) > d or abs(y1 - max(left))) > d:
            continue
        rem = right + [y for y in both if abs(y - y1) > d]
        if not rem or max(rem) - min(rem) <= 2 * d:
            r = m
            break
    else:
        l = m

print(r)
0