結果
問題 |
No.2436 Min Diff Distance
|
ユーザー |
![]() |
提出日時 | 2025-03-20 21:18:02 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,285 bytes |
コンパイル時間 | 180 ms |
コンパイル使用メモリ | 82,248 KB |
実行使用メモリ | 190,056 KB |
最終ジャッジ日時 | 2025-03-20 21:19:06 |
合計ジャッジ時間 | 4,496 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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()