結果
問題 | No.2366 登校 |
ユーザー |
![]() |
提出日時 | 2025-03-20 21:17:14 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,545 bytes |
コンパイル時間 | 347 ms |
コンパイル使用メモリ | 82,824 KB |
実行使用メモリ | 79,524 KB |
最終ジャッジ日時 | 2025-03-20 21:18:16 |
合計ジャッジ時間 | 2,532 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 22 WA * 3 |
ソースコード
import sysfrom collections import dequedef main():input = sys.stdin.read().split()ptr = 0N = int(input[ptr]); ptr += 1M = int(input[ptr]); ptr += 1K = int(input[ptr]); ptr += 1T_val = int(input[ptr]); ptr += 1magical = []for _ in range(K):A = int(input[ptr])-1; ptr += 1B = int(input[ptr])-1; ptr += 1C = int(input[ptr]); ptr += 1D = int(input[ptr]); ptr += 1magical.append((A, B, C, D))# BFS for d_start (from (0,0))d_start = [[-1]*M for _ in range(N)]q = deque()q.append((0, 0))d_start[0][0] = 0while q:i, j = q.popleft()for dx, dy in [(-1,0), (1,0), (0,-1), (0,1)]:ni, nj = i+dx, j+dyif 0 <= ni < N and 0 <= nj < M and d_start[ni][nj] == -1:d_start[ni][nj] = d_start[i][j] + 1q.append((ni, nj))# BFS for d_goal (from (N-1, M-1))d_goal = [[-1]*M for _ in range(N)]q = deque()q.append((N-1, M-1))d_goal[N-1][M-1] = 0while q:i, j = q.popleft()for dx, dy in [(-1,0), (1,0), (0,-1), (0,1)]:ni, nj = i+dx, j+dyif 0 <= ni < N and 0 <= nj < M and d_goal[ni][nj] == -1:d_goal[ni][nj] = d_goal[i][j] + 1q.append((ni, nj))# Check if goal is reachableS = d_start[N-1][M-1]if S == -1:print(-1)return# Case 1: Direct path is possibleif S <= T_val:print(0)return# Check if any magical cell provides a path within T without using magicvalid_path_found = Falsefor A, B, C, D in magical:if d_start[A][B] != -1 and d_goal[A][B] != -1:s_i = d_start[A][B] + d_goal[A][B]if s_i <= T_val:valid_path_found = Truebreakif valid_path_found:print(0)return# Calculate minimum fatigue using magical cellsmin_fatigue = float('inf')for A, B, C, D in magical:ds = d_start[A][B]dg = d_goal[A][B]if ds == -1 or dg == -1:continues_i = ds + dgR = s_i - T_valif R <= 0:continueif C == 1:continue # No time reductionreduce_per = C - 1m = (R + reduce_per - 1) // reduce_perfatigue = m * Dif fatigue < min_fatigue:min_fatigue = fatigueprint(min_fatigue if min_fatigue != float('inf') else -1)if __name__ == '__main__':main()