結果
| 問題 |
No.180 美しいWhitespace (2)
|
| コンテスト | |
| ユーザー |
mkawa2
|
| 提出日時 | 2020-01-27 10:04:47 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,792 bytes |
| コンパイル時間 | 133 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 10,880 KB |
| 最終ジャッジ日時 | 2024-09-14 11:50:19 |
| 合計ジャッジ時間 | 2,480 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 17 WA * 14 |
ソースコード
import sys
sys.setrecursionlimit(10 ** 6)
int1 = lambda x: int(x) - 1
p2D = lambda x: print(*x, sep="\n")
def II(): return int(sys.stdin.readline())
def MI(): return map(int, sys.stdin.readline().split())
def LI(): return list(map(int, sys.stdin.readline().split()))
def LLI(rows_number): return [LI() for _ in range(rows_number)]
def SI(): return sys.stdin.readline()[:-1]
def main():
def isl(m):
mx0 = mx1 = 0
mn0 = mn1 = inf
for a, b in zip(aa, bb):
v = a + b * (m - 1)
if v > mx0: mx0 = v
if v < mn0: mn0 = v
v = a + b * m
if v > mx1: mx1 = v
if v < mn1: mn1 = v
return mx0 - mn0 > mx1 - mn1
def f(x):
mx = 0
mn = inf
for a, b in zip(aa, bb):
v = a + b * x
if v > mx: mx = v
if v < mn: mn = v
return mx - mn
inf = 10 ** 9 + 1
n = II()
aa = []
bb = []
for _ in range(n):
a, b = MI()
aa.append(a)
bb.append(b)
# y=a+bxとして、f(x)=max(y)-min(y)は下に凸の関数になる
# 下に凸の関数の最小値は三分探索が一般的だが、今回はxが整数という制約があるので二分探索でいける
# あるx1と、その左隣のx0(つまりx0=x1-1)があったとき
# f(x0)>f(x1)となれば最小値をとるxはもっと右
# そうでなければ最小値をとるxはもっと左となる
l = 1
r = inf
while l + 1 < r:
m = (l + r) // 2
if isl(m): l = m
else: r = m
# 一応lrの前後を含めて確認
mn = inf
ans = l
for x in range(max(1, l - 1), r + 2):
v = f(x)
if v < mn:
ans = x
mn = v
print(ans)
main()
mkawa2