結果
| 問題 |
No.2436 Min Diff Distance
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 18:59:45 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,285 bytes |
| コンパイル時間 | 205 ms |
| コンパイル使用メモリ | 82,256 KB |
| 実行使用メモリ | 190,076 KB |
| 最終ジャッジ日時 | 2025-03-20 19:00:21 |
| 合計ジャッジ時間 | 4,699 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 3 TLE * 1 -- * 19 |
ソースコード
import sys
def main():
input = sys.stdin.read().split()
n = int(input[0])
xs = []
ys = []
idx = 1
for _ in range(n):
x = int(input[idx])
y = int(input[idx + 1])
xs.append(x)
ys.append(y)
idx += 2
s = [xs[i] + ys[i] for i in range(n)]
d = [xs[i] - ys[i] for i in range(n)]
max_s = max(s)
min_s = min(s)
max_d = max(d)
min_d = min(d)
# Define the four sorted lists
# sorted_x is indices sorted by x, then y
sorted_x = sorted(range(n), key=lambda i: (xs[i], ys[i]))
sorted_y = sorted(range(n), key=lambda i: (ys[i], xs[i]))
sorted_s = sorted(range(n), key=lambda i: (s[i], xs[i]))
sorted_d = sorted(range(n), key=lambda i: (d[i], xs[i]))
# Build position arrays
pos_x = [0] * n
for idx_list, original_i in enumerate(sorted_x):
pos_x[original_i] = idx_list
pos_y = [0] * n
for idx_list, original_i in enumerate(sorted_y):
pos_y[original_i] = idx_list
pos_s = [0] * n
for idx_list, original_i in enumerate(sorted_s):
pos_s[original_i] = idx_list
pos_d = [0] * n
for idx_list, original_i in enumerate(sorted_d):
pos_d[original_i] = idx_list
k = 5
min_distances = [float('inf')] * n
for i in range(n):
current_min = float('inf')
for sorted_list, pos in [(sorted_x, pos_x), (sorted_y, pos_y), (sorted_s, pos_s), (sorted_d, pos_d)]:
p = pos[i]
start = max(0, p - k)
end = min(len(sorted_list) - 1, p + k)
for idx in range(start, end + 1):
j = sorted_list[idx]
if j == i:
continue
current_dist = abs(xs[i] - xs[j]) + abs(ys[i] - ys[j])
if current_dist < current_min:
current_min = current_dist
min_distances[i] = current_min
min_p = float('inf')
for i in range(n):
a = max_s - s[i]
b = s[i] - min_s
c = max_d - d[i]
d_i = d[i] - min_d
current_max = max(a, b, c, d_i)
current_p = abs(current_max - min_distances[i])
if current_p < min_p:
min_p = current_p
print(min_p)
if __name__ == '__main__':
main()
lam6er