結果
| 問題 |
No.1638 Robot Maze
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-08-06 23:31:10 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,811 bytes |
| コンパイル時間 | 157 ms |
| コンパイル使用メモリ | 82,376 KB |
| 実行使用メモリ | 77,444 KB |
| 最終ジャッジ日時 | 2024-09-17 04:00:08 |
| 合計ジャッジ時間 | 5,013 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 36 WA * 13 |
ソースコード
import sys
import heapq
sys.setrecursionlimit(10**6) # 再帰関数使う時有効
H, W = map(int, input().split())
U, D, R, L, K, P = map(int, input().split())
x, y, xt, yt = map(int, input().split())
start = [x-1, y-1]
goal = [xt-1, yt-1]
goal_n = goal[0]*W+goal[0]
allow = [[1, 0], [0, 1], [-1, 0], [0, -1]]
allow_cost = [D, R, U, L]
C = [input() for i in range(H)]
# def fps(now, cost):
# if now == goal:
# return cost
# ans = 10**13+8
# for i in range(4):
# nextx = now[0]+allow[i][0]
# nexty = now[1]+allow[i][1]
# if not (0 <= nextx < H and 0 <= nexty < W):
# continue
# if C[nextx][nexty] == '.':
# new_cost = cost+allow_cost[i]
# elif C[nextx][nexty] == '@':
# new_cost = cost+allow_cost[i]+P
# else:
# continue
# ans = min(ans, fps([nextx, nexty], new_cost))
# return ans
dp = [[-1]*W for i in range(H)]
dp[start[0]][start[1]] = 0
q = [start[0]*W+start[1]]
heapq.heapify(q)
ok = set()
while q:
now_n = heapq.heappop(q)
now = [now_n//W, now_n % W]
if now_n == goal_n:
break
ok.add(now_n)
for i in range(4):
nextx = now[0]+allow[i][0]
nexty = now[1]+allow[i][1]
if not (0 <= nextx < H and 0 <= nexty < W) or C[nextx][nexty] == '#' or nextx*W+nexty in ok:
continue
if C[nextx][nexty] == '.':
new_cost = dp[now[0]][now[1]]+allow_cost[i]
elif C[nextx][nexty] == '@':
new_cost = dp[now[0]][now[1]]+allow_cost[i]+P
if dp[nextx][nexty] == -1 or dp[nextx][nexty] > new_cost:
dp[nextx][nexty] = new_cost
heapq.heappush(q, nextx*W+nexty)
if dp[goal[0]][goal[1]] <= K and dp[goal[0]][goal[1]] != -1:
print('Yes')
else:
print('No')