結果
| 問題 |
No.2436 Min Diff Distance
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 16:21:59 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,950 bytes |
| コンパイル時間 | 474 ms |
| コンパイル使用メモリ | 82,408 KB |
| 実行使用メモリ | 180,820 KB |
| 最終ジャッジ日時 | 2025-06-12 16:22:30 |
| 合計ジャッジ時間 | 12,035 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 7 WA * 16 |
ソースコード
def main():
import sys
input = sys.stdin.read().split()
idx = 0
N = int(input[idx])
idx += 1
points = []
us = []
vs = []
for _ in range(N):
X = int(input[idx])
Y = int(input[idx + 1])
idx += 2
u = X + Y
v = X - Y
points.append((u, v))
us.append(u)
vs.append(v)
# Check for duplicate u and v
seen = set()
for u, v in points:
key = (u, v)
if key in seen:
print(0)
return
seen.add(key)
max_u = max(us)
min_u = min(us)
max_v = max(vs)
min_v = min(vs)
# Sort points by u and by v
sorted_by_u = sorted(points, key=lambda x: x[0])
sorted_by_v = sorted(points, key=lambda x: x[1])
# Function to find minimal Chebyshev distance for each point
def find_min_d(point_list, key_index):
min_d_list = [float('inf')] * N
for i in range(N):
for j in range(max(0, i-2), min(N, i+3)):
if j == i:
continue
u1, v1 = point_list[i]
u2, v2 = point_list[j]
du = abs(u1 - u2)
dv = abs(v1 - v2)
d = max(du, dv)
if d < min_d_list[i]:
min_d_list[i] = d
return min_d_list
min_d_u = find_min_d(sorted_by_u, 0)
min_d_v = find_min_d(sorted_by_v, 1)
# For each point, find the minimal d from both sorted lists
min_d = []
for i in range(N):
d = min(min_d_u[i], min_d_v[i])
min_d.append(d)
# Now, compute the minimal P_i
min_p = float('inf')
for i in range(N):
u_i, v_i = points[i]
max_d = max(max_u - u_i, u_i - min_u, max_v - v_i, v_i - min_v)
current_p = max_d - min_d[i]
if current_p < min_p:
min_p = current_p
print(min_p)
if __name__ == '__main__':
main()
gew1fw