結果
問題 |
No.1998 Manhattan Restaurant
|
ユーザー |
![]() |
提出日時 | 2024-12-02 14:11:01 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 204 ms / 2,000 ms |
コード長 | 1,146 bytes |
コンパイル時間 | 259 ms |
コンパイル使用メモリ | 82,004 KB |
実行使用メモリ | 82,744 KB |
最終ジャッジ日時 | 2024-12-02 14:11:07 |
合計ジャッジ時間 | 5,077 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 31 |
ソースコード
import sys input = sys.stdin.readline INF = 10 ** 18 N = int(input()) P = [] for _ in [0] * N: x, y = map(int, input().split()) P.append((x + y, x - y)) max_x = max_y = -INF min_x = min_y = INF for x, y in P: if(max_x < x): max_x = x if(max_y < y): max_y = y if(min_x > x): min_x = x if(min_y > y): min_y = y def func(mid): mid *= 2 block = [[0] * 2 for _ in [0] * 2] for x, y in P: if((x < max_x - mid and x > min_x + mid) or (y < max_y - mid and y > min_y + mid)): return False if(x < max_x - mid and y < max_y - mid): block[0][0] = 1 if(x > min_x + mid and y < max_y - mid): block[1][0] = 1 if(x < max_x - mid and y > min_y + mid): block[0][1] = 1 if(x > min_x + mid and y > min_y + mid): block[1][1] = 1 if((block[0][0] | block[1][1]) == 0 or (block[0][1] | block[1][0]) == 0): return True return False ok = 2 * 10 ** 9 + 1 ng = -1 while(abs(ok - ng) > 1): mid = (ok + ng) // 2 if func(mid): ok = mid else: ng = mid print(ok)