Submission #123011

#TimeUsernameProblemLanguageResultExecution timeMemory
123011model_codeNautilus (BOI19_nautilus)Cpython 3
66 / 100
1071 ms3640 KiB
import sys

r,c,m = [int(x) for x in sys.stdin.readline().split()]
grid = [sys.stdin.readline() for i in range(r)]
msg = sys.stdin.readline()
reach,sea,tmp = [0 for i in range(r)],\
                [0 for i in range(r)],\
                [0 for i in range(r)]
for i in range(r):
    for j in range(c):
        sea[i] *= 2
        sea[i] += grid[i][j] == '.'
    reach[i] = sea[i]
ans = 0
for w in msg:
    for i in range(r):
        if w == 'W':
            reach[i] = (reach[i] << 1)&sea[i]
        if w == 'E':
            reach[i] = (reach[i] >> 1)&sea[i]
        if w == 'N':
            reach[i] = reach[i+1]&sea[i] if i+1 < r else 0
        if w == '?':
            tmp[i] = (reach[i] << 1)|(reach[i] >> 1)
            if i:
                tmp[i] |= reach[i-1]
            if i+1 < r:
                tmp[i] |= reach[i+1]
            tmp[i] &= sea[i]
    for i in range(r-1,-1,-1):
        if w == 'S':
            reach[i] = reach[i-1]&sea[i] if i else 0
    for i in range(r):
        if w == '?':
            reach[i] = tmp[i]

ans = sum([bin(x).count('1') for x in reach])
print(ans)
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...