結果
| 問題 |
No.34 砂漠の行商人
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-07-09 15:57:16 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 99 ms / 5,000 ms |
| コード長 | 1,301 bytes |
| コンパイル時間 | 344 ms |
| コンパイル使用メモリ | 82,188 KB |
| 実行使用メモリ | 79,988 KB |
| 最終ジャッジ日時 | 2024-07-23 13:04:56 |
| 合計ジャッジ時間 | 3,772 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
from typing import List, Tuple
def main():
rd = input().split()
n, v = int(rd[0]), int(rd[1])
sx, sy = int(rd[2]) - 1, int(rd[3]) - 1
gx, gy = int(rd[4]) - 1, int(rd[5]) - 1
lij = [list(map(int, input().split())) for _ in range(n)]
eij: List[List[Tuple[int, int]]] = [[] for _ in range(n * n)]
for j in range(n):
for i in range(n):
p = (j, i)
for sib in sibPoints:
np = (p[0] + sib[0], p[1] + sib[1])
if np[0] >= 0 and np[1] >= 0 and np[0] < n and np[1] < n:
eij[p[0] + p[1] * n].append((np[0] + np[1] * n, lij[np[1]][np[0]]))
s = sx + sy * n
g = gx + gy * n
def calc():
qi = [s]
dp = [-1] * (n * n)
dp[s] = 0
r = 1
while len(qi) > 0:
ri = []
for q in qi:
for e in eij[q]:
nv = dp[q] + e[1]
if nv < v and (dp[e[0]] < 0 or dp[e[0]] > nv):
if e[0] == g:
return r
dp[e[0]] = nv
ri.append(e[0])
qi = ri
r += 1
return -1
print(calc())
sibPoints = [(-1, 0), (0, -1), (1, 0), (0, 1)]
if __name__ == '__main__':
main()