結果
問題 |
No.2157 崖
|
ユーザー |
|
提出日時 | 2025-03-29 17:46:57 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,954 bytes |
コンパイル時間 | 444 ms |
コンパイル使用メモリ | 82,644 KB |
実行使用メモリ | 104,452 KB |
最終ジャッジ日時 | 2025-03-29 17:47:17 |
合計ジャッジ時間 | 13,614 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 11 TLE * 2 -- * 9 |
ソースコード
## https://yukicoder.me/problems/no/2157 def binary_search(base_d_array, v): if v < base_d_array[0]: return -1 low = 0 high = len(base_d_array) - 1 while high - low > 1: mid = (high + low) //2 if base_d_array[mid] <= v: low = mid else: high = mid if base_d_array[high] <= v: return high else: return low def solve(N, M, D, K): d_array = D[0] for i in range(1, N): base_d_array = d_array d_array = [] for j in range(M): d = D[i][j] # 2分探索 if d < base_d_array[0]: continue low_i_1 = binary_search(base_d_array, d - K - 1) highi = binary_search(base_d_array, d) if highi - low_i_1 > 0: d_array.append(d) if len(d_array) == 0: return False if len(d_array) == 0: return False return True def main(): N, M = map(int, input().split()) D = [] for _ in range(N): D.append(list(map(int, input().split()))) # まずはソート for d_list in D: d_list.sort() # 座標圧縮つきBITの用意 d_array = D[0] for i in range(1, N): base_d_array = d_array d_array = [] for j in range(M): d = D[i][j] # 2分探索 if d < base_d_array[0]: continue d_array.append(d) if len(d_array) == 0: print(-1) return if len(d_array) == 0: print(-1) return # 最小値を計算 low = 0 high = 10 ** 9 while high - low > 1: mid = (high + low) // 2 if solve(N, M, D, mid): high = mid else: low = mid if solve(N, M, D, low): print(low) else: print(high) if __name__ == "__main__": main()