結果

問題 No.180 美しいWhitespace (2)
ユーザー 👑 rin204
提出日時 2023-11-23 19:04:03
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 383 ms / 5,000 ms
コード長 1,743 bytes
コンパイル時間 185 ms
コンパイル使用メモリ 81,920 KB
実行使用メモリ 76,800 KB
最終ジャッジ日時 2024-09-26 08:17:51
合計ジャッジ時間 4,962 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 31
権限があれば一括ダウンロードができます

ソースコード

diff #

n = int(input())
if n == 1:
    print(1)
    exit()
A = [0] * n
B = [0] * n
for i in range(n):
    B[i], A[i] = map(int, input().split())

mi = [None] * n
ma = [None] * n
for i in range(n):
    l = 1
    r = 1 << 60
    for j in range(n):
        if i == j:
            continue
        if A[i] == A[j]:
            if B[i] > B[j]:
                r = -1
                break
        elif A[i] > A[j]:
            r = min(r, (B[j] - B[i]) // (A[i] - A[j]))
        else:
            db = B[i] - B[j]
            da = A[j] - A[i]
            l = max(l, (db + da - 1) // da)

    if l <= r:
        mi[i] = (l, r)

    l = 1
    r = 1 << 60
    for j in range(n):
        if i == j:
            continue
        if A[i] == A[j]:
            if B[i] < B[j]:
                r = -1
                break
        elif A[i] > A[j]:
            da = A[i] - A[j]
            db = B[j] - B[i]
            l = max(l, (db + da - 1) // da)
        else:
            r = min(r, (B[i] - B[j]) // (A[j] - A[i]))

    if l <= r:
        ma[i] = (l, r)


ans = 1 << 60
x = 1 << 60
for i in range(n):
    if mi[i] is None:
        continue

    l1, r1 = mi[i]
    for j in range(n):
        if i == j or ma[j] is None:
            continue

        l2, r2 = ma[j]

        cand = []

        if l1 <= r2 <= r1:
            cand.append(r2)
        if l1 <= l2 <= r1:
            cand.append(l2)
        if l2 <= l1 <= r2:
            cand.append(l1)
        if l2 <= r1 <= r2:
            cand.append(r1)

        for c in cand:
            ma_ = A[j] * c + B[j]
            mi_ = A[i] * c + B[i]
            if ma_ - mi_ < ans:
                ans = ma_ - mi_
                x = c
            elif ma_ - mi_ == ans and c < x:
                x = c


print(x)
0