ํ๋ ์ด์ด๋ค์ด ์์๋๋ก s๋งํผ ํ์ฅํด๋๊ฐ๋ค. ํ์ฅ์ด๊ธฐ ๋๋ฌธ์ ๋๋น ์ฐ์ ํ์์ ์ฌ์ฉํ๋ค. ํ๋ ์ด์ด๋ค์ด ํ์์ ์์ํ ์ ์๋ ์์น๋ฅผ ์ ์ฅํด๋๋ค๊ฐ ๊ฐ ํด๋ง๋ค ๊ทธ ์์น๋ค์์ ๋๋น ์ฐ์ ํ์์ ํตํด ํ์ฅํด๋๊ฐ๋ค. s๋งํผ ํ์ฅํ๊ณ ๋ง์ง๋ง์ ์ ์ฅ๋ ์์น๋ค์ ๋ค์ ํด์ ํ์ํ ์ ์๋๋ก ๋ค์ ์ ์ฅํ๋ค.
ํ์ฅ์ ๋ ์ด์ ํ์ฅ์ด ์งํ๋ ์ ์์ ๋๊น์ง ์ด๋ฃจ์ด์ง๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ธฐ์ ๋ค๋ค ๋ ์ด์ ๋จ์ ์นธ์ด ์์ ๋๊น์ง๋ผ๊ณ ์๊ฐํ๊ณ , ๋๋ ๊ทธ๋ฌ๋ค. ๊ทธ๋์ .
์นธ์ด ๋จ์์๋ค๋ฉด~ ์ผ๋ก ์ ๊ทผํ์ง๋ง ์ํ๊น๊ฒ๋ ์๊ฐ์ด๊ณผ์ ๊ฑธ๋ ธ๋ค.
๋ฐ๋ก ์ด๋ฐ ๋ฐ๋ก ๋๋ฌธ์ด๋ค.
1#........
#.........
2#.......#
3#......#4
๋ฒฝ์ ๊ฐ๋ก๋งํ ๋ ์ด์ ์ด๋ํ ์ ์์ด์ ๋ค ์ฑ์ธ ์ ์๋ ๊ฒฝ์ฐ์๋ ๋ฌดํ์ผ๋ก ๋์๊ฐ๋ค๋ณด๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด์๋ค. ์์ ๋ฐ๋ก๋ ์์ฃผ ๊ทน๋จ์ ์ธ ์์ ์ธ๋ฐ ์ด๋ฐ ๊ฒฝ์ฐ๋ง๊ณ ๋ฒฝ์ ๋๋ฌ์ธ์ธ .
๋ผ๋๊ฐ ์ด๋ฐ ๊ฒ ํ๋๋ผ๋ ์๋ ๊ฒฝ์ฐ์๋ ๋ด๊ฐ ๊ฑด ์ข
๋ฃ์กฐ๊ฑด์ผ๋ก๋ ์ข
๋ฃ๋ ์ ์์๋ค.
๊ทธ๋์ ๋ ์ด์ ํ์ํ ์ ์๋ ์์น๊ฐ ์์ ๋ ์ข ๋ฃํ๋ค. ์์์ ๋ค์ ํด๋ง๋ค ํ์ํ๊ธฐ ์ํด ํ์ํ ์์น๋ค์ ์ ์ฅํ๋ค๊ณ ํ๋๋ฐ ์ด ์์น๋ค์ด ๋ชจ๋ ํ๋ ์ด์ด์๊ฒ ๋จ ํ๋๋ ๋จ์์์ง ์์ ๋ ์ข ๋ฃํ๋ ์กฐ๊ฑด์ด๋ค.
import sys
input = sys.stdin.readline
from collections import defaultdict
def is_finish():
return sum(list(castle.values())) != total\
and any(list(player.values()))
def bfs(queue, p, s):
global castle
while queue and s:
new_queue = []
for r, c in queue:
for dr, dc in dirs:
nr, nc = r+dr, c+dc
if 0<=nr<N and 0<=nc<M and board[nr][nc] == '.' and board[nr][nc] != '#':
board[nr][nc] = p
new_queue.append((nr, nc))
queue = new_queue[:]
castle[p] += len(queue)
s -= 1
return queue
N, M, P = map(int, input().split())
S = list(map(int, input().split()))
board = [list(input()) for _ in range(N)]
player = defaultdict(list)
castle = defaultdict(int)
dirs = [(0, 1), (1, 0), (-1, 0), (0, -1)]
total = N*M
for i in range(N):
for j in range(M):
if board[i][j].isdigit():
player[board[i][j]].append((i, j))
castle[board[i][j]] += 1
if board[i][j] == '#':
total -= 1
while is_finish():
for i in range(1, P+1):
p = str(i)
if not player[p]:
continue
player[p] = bfs(player[p], p, S[i-1])
for i in range(1, P+1):
print(castle[str(i)], end=' ')
print()