結果
| 問題 |
No.2436 Min Diff Distance
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 21:36:46 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,129 bytes |
| コンパイル時間 | 394 ms |
| コンパイル使用メモリ | 81,832 KB |
| 実行使用メモリ | 126,884 KB |
| 最終ジャッジ日時 | 2025-04-15 21:39:05 |
| 合計ジャッジ時間 | 19,745 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 7 WA * 16 |
ソースコード
n = int(input())
points = []
s = []
d = []
for _ in range(n):
x, y = map(int, input().split())
points.append((x, y))
s_val = x + y
d_val = x - y
s.append(s_val)
d.append(d_val)
# Prepare sorted_s and sorted_d arrays along with their positions
sorted_s = sorted((s[i], i) for i in range(n))
sorted_d = sorted((d[i], i) for i in range(n))
pos_in_s = [0] * n
for idx in range(n):
_, original_i = sorted_s[idx]
pos_in_s[original_i] = idx
pos_in_d = [0] * n
for idx in range(n):
_, original_i = sorted_d[idx]
pos_in_d[original_i] = idx
min_s = sorted_s[0][0]
max_s = sorted_s[-1][0]
min_d = sorted_d[0][0]
max_d = sorted_d[-1][0]
global_min_P = float('inf')
k = 5 # Number of neighbors to check on each side
for i in range(n):
current_s = s[i]
current_d = d[i]
# Calculate max_distance
max_s_val = max(current_s - min_s, max_s - current_s)
max_d_val = max(current_d - min_d, max_d - current_d)
max_distance = max(max_s_val, max_d_val)
# Calculate min_distance
min_distance = float('inf')
# Check neighbors in sorted_s
pos = pos_in_s[i]
start = max(0, pos - k)
end = min(n - 1, pos + k)
for j in range(start, end + 1):
s_j, original_j = sorted_s[j]
if original_j == i:
continue
d_j = d[original_j]
current_dist = max(abs(current_s - s_j), abs(current_d - d_j))
if current_dist < min_distance:
min_distance = current_dist
# Check neighbors in sorted_d
pos = pos_in_d[i]
start = max(0, pos - k)
end = min(n - 1, pos + k)
for j in range(start, end + 1):
d_j, original_j = sorted_d[j]
if original_j == i:
continue
s_j = s[original_j]
current_dist = max(abs(current_s - s_j), abs(current_d - d_j))
if current_dist < min_distance:
min_distance = current_dist
# Calculate P_i and update global_min_P
if min_distance != float('inf'):
P_i = abs(max_distance - min_distance)
if P_i < global_min_P:
global_min_P = P_i
print(global_min_P)
lam6er