結果
問題 |
No.2157 崖
|
ユーザー |
|
提出日時 | 2025-03-29 17:50:43 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,091 bytes |
コンパイル時間 | 204 ms |
コンパイル使用メモリ | 82,308 KB |
実行使用メモリ | 118,384 KB |
最終ジャッジ日時 | 2025-03-29 17:51:15 |
合計ジャッジ時間 | 10,433 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 TLE * 4 -- * 5 |
ソースコード
## https://yukicoder.me/problems/no/2157 def binary_search(base_d_array, v, b): if v < base_d_array[0]: return -1 low = (0 if b == -1 else b) 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, -1) highi = binary_search(base_d_array, d, low_i_1) 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() max_size = 0 for i in range(N - 1): max_size = max(max_size, D[i + 1][-1] - D[i][0], 0) # 座標圧縮つき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 = max_size 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()