Submission #1268113

#TimeUsernameProblemLanguageResultExecution timeMemory
1268113joesephdiverMecho (IOI09_mecho)Pypy 3
19 / 100
406 ms84708 KiB
from collections import deque from math import ceil N, S = map(int, input().split()) a = [input() for _ in range(N)] dist = [[-1]*N for x in range(N)] q = deque() for x in range(N): for y in range(N): if a[x][y] == 'H': q.append((x, y)) dist[x][y] = 0 elif a[x][y] == 'M': M = (x, y) elif a[x][y] == 'D': D = (x, y) while q: x, y = q.popleft() for dx, dy in ((-1, 0), (1, 0), (0, -1), (0, 1)): if 0 <= x+dx < N and 0 <= y+dy < N and a[x+dx][y+dy] in 'GM' and dist[x+dx][y+dy] == -1: dist[x+dx][y+dy] = dist[x][y]+1 q.append((x+dx, y+dy)) distM = [[float('inf')]*N for x in range(N)] distdiff = [[float('-inf')]*N for x in range(N)] distM[M[0]][M[1]], distdiff[M[0]][M[1]] = 0, dist[x][y] distdiff[D[0]][D[1]] = -1 q = deque([M]) while q: x, y = q.popleft() if a[x][y] != 'D': distdiff[x][y] = min(distdiff[x][y], dist[x][y]-ceil(distM[x][y]/S)) for dx, dy in ((-1, 0), (1, 0), (0, -1), (0, 1)): if 0 <= x+dx < N and 0 <= y+dy < N and a[x+dx][y+dy] in 'GD' and distM[x][y]+1 <= distM[x+dx][y+dy]: if distM[x+dx][y+dy] == float('inf'): distM[x+dx][y+dy] = distM[x][y]+1 q.append((x+dx, y+dy)) distdiff[x+dx][y+dy] = max(distdiff[x][y], distdiff[x+dx][y+dy]) print(distdiff[D[0]][D[1]])

Compilation message (stdout)

Compiling 'mecho.py'...

=======
  adding: __main__.pyc (deflated 53%)

=======
#Verdict Execution timeMemoryGrader output
Fetching results...