結果
問題 |
No.2366 登校
|
ユーザー |
![]() |
提出日時 | 2025-04-09 20:58:16 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,181 bytes |
コンパイル時間 | 274 ms |
コンパイル使用メモリ | 82,640 KB |
実行使用メモリ | 78,256 KB |
最終ジャッジ日時 | 2025-04-09 21:00:40 |
合計ジャッジ時間 | 2,657 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 22 WA * 3 |
ソースコード
import sys from collections import deque def main(): # Read input N, M, K, T = map(int, sys.stdin.readline().split()) magic = [] for _ in range(K): A, B, C, D = map(int, sys.stdin.readline().split()) A -= 1 # convert to 0-based B -= 1 magic.append((A, B, C, D)) # Directions: up, down, left, right dirs = [(-1, 0), (1, 0), (0, -1), (0, 1)] # BFS from start (0,0) start_dist = [[float('inf')] * M for _ in range(N)] start_dist[0][0] = 0 q = deque() q.append((0, 0)) while q: x, y = q.popleft() for dx, dy in dirs: nx, ny = x + dx, y + dy if 0 <= nx < N and 0 <= ny < M: if start_dist[nx][ny] > start_dist[x][y] + 1: start_dist[nx][ny] = start_dist[x][y] + 1 q.append((nx, ny)) S_min = start_dist[N-1][M-1] if S_min <= T: print(0) return # BFS from end (N-1, M-1) end_dist = [[float('inf')] * M for _ in range(N)] end_dist[N-1][M-1] = 0 q = deque() q.append((N-1, M-1)) while q: x, y = q.popleft() for dx, dy in dirs: nx, ny = x + dx, y + dy if 0 <= nx < N and 0 <= ny < M: if end_dist[nx][ny] > end_dist[x][y] + 1: end_dist[nx][ny] = end_dist[x][y] + 1 q.append((nx, ny)) min_fatigue = float('inf') for A, B, C, D in magic: a = start_dist[A][B] b = end_dist[A][B] if a == float('inf') or b == float('inf'): continue S = a + b required_X = S - T if required_X <= 0: # Not possible here since S_min > T continue if C <= 1: continue # C_i-1 <=0, can't contribute contribution = C - 1 required_k = (required_X + (contribution - 1)) // contribution # ceil division fatigue = required_k * D if fatigue < min_fatigue: min_fatigue = fatigue if min_fatigue != float('inf'): print(min_fatigue) else: print(-1) if __name__ == "__main__": main()