結果
問題 |
No.2855 Move on Grid
|
ユーザー |
|
提出日時 | 2025-09-07 02:10:00 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 761 ms / 3,000 ms |
コード長 | 1,890 bytes |
コンパイル時間 | 385 ms |
コンパイル使用メモリ | 82,300 KB |
実行使用メモリ | 131,172 KB |
最終ジャッジ日時 | 2025-09-07 02:10:26 |
合計ジャッジ時間 | 25,345 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 40 |
ソースコード
## https://yukicoder.me/problems/no/2855 from collections import deque MAX_VALUE = 10 ** 18 def solve(N, M, K, A, border): B = [[False] * M for _ in range(N)] for i in range(N): for j in range(M): if A[i][j] >= border: B[i][j] = True dist = [[MAX_VALUE for _ in range(M)] for _ in range(N)] passed = [[False for _ in range(M)] for _ in range(N)] dist[0][0] = 0 if A[0][0] >= border else 1 queue = deque() queue.append((0, 0)) while len(queue) > 0: i, j = queue.popleft() if passed[i][j]: continue passed[i][j] = True for di, dj in ((-1, 0), (1, 0), (0, 1), (0, -1)): new_i = di + i new_j = dj + j if 0 <= new_i < N and 0 <= new_j < M: if B[new_i][new_j]: if dist[new_i][new_j] > dist[i][j]: dist[new_i][new_j] = dist[i][j] queue.appendleft((new_i, new_j)) else: if dist[new_i][new_j] > dist[i][j] + 1: dist[new_i][new_j] = dist[i][j] + 1 queue.append((new_i, new_j)) return dist[N - 1][M - 1] <= K def main(): N, M, K = map(int, input().split()) A = [] for _ in range(N): A.append(list(map(int, input().split()))) values = set() for i in range(N): for j in range(M): values.add(A[i][j]) values.add(10 ** 9) values = list(values) values.sort() low = 0 high = len(values) - 1 while high - low > 1: mid = (high + low ) // 2 if solve(N, M, K, A, values[mid]): low = mid else: high = mid if solve(N, M, K, A, values[high]): print(values[high]) else: print(values[low]) if __name__ == '__main__': main()