Submission #8814505


Source Code Expand

import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines

from heapq import heappush, heappop

H,W,K = map(int,readline().split())
S = readline().rstrip()
A = [b'#' * (W+2)]
A += [b'#' + row + b'#' for row in read().split()]
A += [b'#' * (W+2)]

A = list(b''.join(A))
start = A.index(ord('S'))
goal = A.index(ord('G'))
A = [x != ord('#') for x in A]

INF = 10 ** 18
S += S
wait_U = [INF] * (K+K+1)
wait_D = [INF] * (K+K+1)
wait_R = [INF] * (K+K+1)
wait_L = [INF] * (K+K+1)
u,d,r,l = [ord(x) for x in 'UDRL']
for n in range(K+K-1,-1,-1):
    s = S[n]
    wait_U[n] = 0 if s == u else wait_U[n+1] + 1
    wait_D[n] = 0 if s == d else wait_D[n+1] + 1
    wait_R[n] = 0 if s == r else wait_R[n+1] + 1
    wait_L[n] = 0 if s == l else wait_L[n+1] + 1

H += 2; W += 2
dist = [INF] * (H * W)
mask = (1 << 21) - 1
q = [start]
dist[start] = 0
while q:
    x = heappop(q)
    dv = x >> 21
    v = x & mask
    if v == goal:
        break
    if dist[v] < dv:
        continue
    dvK = dv % K
    w = v + 1
    if A[w]:
        dw = dv + wait_R[dvK] + 1
        if dist[w] > dw:
            dist[w] = dw
            heappush(q,((dw << 21) + w))
    w = v - 1
    if A[w]:
        dw = dv + wait_L[dvK] + 1
        if dist[w] > dw:
            dist[w] = dw
            heappush(q,((dw << 21) + w))
    w = v + W
    if A[w]:
        dw = dv + wait_D[dvK] + 1
        if dist[w] > dw:
            dist[w] = dw
            heappush(q,((dw << 21) + w))
    w = v - W
    if A[w]:
        dw = dv + wait_U[dvK] + 1
        if dist[w] > dw:
            dist[w] = dw
            heappush(q,((dw << 21) + w))

answer = dist[goal]
if answer >= INF:
    answer = -1
print(answer)

Submission Info

Submission Time
Task E - 迷路
User maspy
Language PyPy3 (2.4.0)
Score 500
Code Size 1792 Byte
Status AC
Exec Time 1979 ms
Memory 175316 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status AC
AC × 44
Set Name Test Cases
Sample
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, s1.txt, s2.txt, s3.txt
Case Name Status Exec Time Memory
01.txt AC 169 ms 38256 KB
02.txt AC 166 ms 38256 KB
03.txt AC 166 ms 38256 KB
04.txt AC 169 ms 38256 KB
05.txt AC 167 ms 38256 KB
06.txt AC 1979 ms 132308 KB
07.txt AC 1808 ms 163156 KB
08.txt AC 1924 ms 153812 KB
09.txt AC 1809 ms 159828 KB
10.txt AC 1724 ms 168404 KB
11.txt AC 1774 ms 158296 KB
12.txt AC 1967 ms 175316 KB
13.txt AC 1885 ms 166868 KB
14.txt AC 1890 ms 172884 KB
15.txt AC 1901 ms 160340 KB
16.txt AC 581 ms 115496 KB
17.txt AC 1486 ms 169428 KB
18.txt AC 1357 ms 165972 KB
19.txt AC 1093 ms 149844 KB
20.txt AC 1760 ms 150484 KB
21.txt AC 1581 ms 133332 KB
22.txt AC 1652 ms 156500 KB
23.txt AC 1692 ms 135252 KB
24.txt AC 1669 ms 140884 KB
25.txt AC 1598 ms 141780 KB
26.txt AC 1598 ms 136276 KB
27.txt AC 1576 ms 144340 KB
28.txt AC 1671 ms 142804 KB
29.txt AC 1709 ms 143444 KB
30.txt AC 1675 ms 149076 KB
31.txt AC 271 ms 118188 KB
32.txt AC 257 ms 103468 KB
33.txt AC 274 ms 117292 KB
34.txt AC 259 ms 103468 KB
35.txt AC 254 ms 118188 KB
36.txt AC 252 ms 102956 KB
37.txt AC 257 ms 118188 KB
38.txt AC 252 ms 118188 KB
39.txt AC 254 ms 101036 KB
40.txt AC 352 ms 115112 KB
41.txt AC 163 ms 38256 KB
s1.txt AC 166 ms 38256 KB
s2.txt AC 167 ms 38736 KB
s3.txt AC 162 ms 38256 KB