結果
| 問題 |
No.2366 登校
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 20:09:00 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,253 bytes |
| コンパイル時間 | 167 ms |
| コンパイル使用メモリ | 82,184 KB |
| 実行使用メモリ | 79,352 KB |
| 最終ジャッジ日時 | 2025-06-12 20:14:47 |
| 合計ジャッジ時間 | 2,296 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 22 WA * 3 |
ソースコード
import sys
from collections import deque
def main():
input = sys.stdin.read().split()
ptr = 0
N = int(input[ptr]); ptr +=1
M = int(input[ptr]); ptr +=1
K = int(input[ptr]); ptr +=1
T = int(input[ptr]); ptr +=1
# Read mysterious squares
mysterious = []
for _ in range(K):
A = int(input[ptr])-1; ptr +=1 # convert to 0-based
B = int(input[ptr])-1; ptr +=1
C = int(input[ptr]); ptr +=1
D = int(input[ptr]); ptr +=1
mysterious.append( (A, B, C, D) )
# Compute dist_start: minimal steps from (0,0)
dist_start = [ [ -1 for _ in range(M) ] for __ in range(N) ]
q = deque()
q.append( (0,0) )
dist_start[0][0] = 0
while q:
i,j = q.popleft()
for di, dj in [ (-1,0), (1,0), (0,-1), (0,1) ]:
ni, nj = i+di, j+dj
if 0<=ni<N and 0<=nj<M and dist_start[ni][nj] == -1:
dist_start[ni][nj] = dist_start[i][j] +1
q.append( (ni, nj) )
# Compute dist_end: minimal steps from (N-1, M-1)
dist_end = [ [ -1 for _ in range(M) ] for __ in range(N) ]
q = deque()
q.append( (N-1, M-1) )
dist_end[N-1][M-1] = 0
while q:
i,j = q.popleft()
for di, dj in [ (-1,0), (1,0), (0,-1), (0,1) ]:
ni, nj = i+di, j+dj
if 0<=ni<N and 0<=nj<M and dist_end[ni][nj] == -1:
dist_end[ni][nj] = dist_end[i][j] +1
q.append( (ni, nj) )
D = (N-1) + (M-1)
if D <= T:
print(0)
return
min_fatigue = float('inf')
for (A, B, C, D_i) in mysterious:
if C <= 1:
continue # No gain, skip
s_i = A
s_j = B
if dist_start[s_i][s_j] == -1 or dist_end[s_i][s_j] == -1:
continue # Not reachable, skip
needed = (dist_start[s_i][s_j] + dist_end[s_i][s_j]) - T
if needed <= 0:
continue
gain = C -1
if gain <=0:
continue
k = (needed + gain -1) // gain # Ceiling division
fatigue = k * D_i
if fatigue < min_fatigue:
min_fatigue = fatigue
if min_fatigue != float('inf'):
print(min_fatigue)
else:
print(-1)
if __name__ == "__main__":
main()
gew1fw