結果
| 問題 |
No.1572 XI
|
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2021-06-27 15:02:45 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,830 bytes |
| コンパイル時間 | 392 ms |
| コンパイル使用メモリ | 82,376 KB |
| 実行使用メモリ | 197,108 KB |
| 最終ジャッジ日時 | 2024-06-25 11:47:16 |
| 合計ジャッジ時間 | 6,725 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 30 TLE * 9 -- * 6 |
ソースコード
"""
https://yukicoder.me/problems/no/1572
サイコロの向きは、6通りしかない
頑張って推移を書けばおk
0 表
1 上
2 右
3 下
4 左
5 裏
"""
import sys
from sys import stdin
from collections import deque
def encode(x,y,state):
return H*W*state + y*H + x
def decode(now):
state = now // (H*W)
y = (now % (H*W)) // H
x = (now % (H*W)) % H
return x,y,state
def chdi(state,movedir):
if state == 0:
if movedir == "U":
return 1
elif movedir == "R":
return 2
elif movedir == "D":
return 3
else:
return 4
elif state == 1: #上
if movedir == "U":
return 5
elif movedir == "D":
return 0
else:
return 1
elif state == 2: #右
if movedir == "R":
return 5
elif movedir == "L":
return 0
else:
return 2
elif state == 3: #下
if movedir == "D":
return 5
elif movedir == "U":
return 0
else:
return 3
elif state == 4: #左
if movedir == "L":
return 5
elif movedir == "R":
return 0
else:
return 4
else: #裏
if movedir == "U":
return 3
elif movedir == "R":
return 4
elif movedir == "D":
return 1
else:
return 2
H,W = map(int,stdin.readline().split())
sx,sy = map(int,stdin.readline().split())
gx,gy = map(int,stdin.readline().split())
sx -= 1
sy -= 1
gx -= 1
gy -= 1
gcode = encode(gx,gy,0)
A = [ list(stdin.readline()[:-1]) for i in range(H) ]
d = [float("inf")] * (H*W*6)
q = deque([encode(sx,sy,0)])
d[encode(sx,sy,0)] = 0
while q:
code = q.popleft()
if code == gcode:
break
x,y,state = decode(code)
if x != 0 and A[x-1][y] != "#":
nx,ny,nstate = x-1,y,chdi(state,"U")
ncode = encode(nx,ny,nstate)
if d[ncode] > d[code] + 1:
d[ncode] = d[code] + 1
q.append(ncode)
if x != H-1 and A[x+1][y] != "#":
nx,ny,nstate = x+1,y,chdi(state,"D")
ncode = encode(nx,ny,nstate)
if d[ncode] > d[code] + 1:
d[ncode] = d[code] + 1
q.append(ncode)
if y != 0 and A[x][y-1] != "#":
nx,ny,nstate = x,y-1,chdi(state,"L")
ncode = encode(nx,ny,nstate)
if d[ncode] > d[code] + 1:
d[ncode] = d[code] + 1
q.append(ncode)
if y != W-1 and A[x][y+1] != "#":
nx,ny,nstate = x,y+1,chdi(state,"R")
ncode = encode(nx,ny,nstate)
if d[ncode] > d[code] + 1:
d[ncode] = d[code] + 1
q.append(ncode)
ans = d[gcode]
print (ans if ans != float("inf") else -1)
SPD_9X2