dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
R, C, T = map(int, input().rstrip().split())
graph = [list(map(int, input().rstrip().split())) for _ in range(R)]
dusts = []
machine = []
for i in range(R):
for j in range(C):
if graph[i][j] > 0:
dusts.append((i, j))
elif graph[i][j] == -1:
machine.append((i, 0))
up_track = []
down_track = []
x, y = machine[0][0], machine[0][1]
for i in range(1, C):
up_track.append((x, i))
for i in range(x-1, -1, -1):
up_track.append((i, C-1))
for i in range(C-2, -1, -1):
up_track.append((0, i))
for i in range(1, x):
up_track.append((i, 0))
x, y = machine[1][0], machine[1][1]
for i in range(1, C):
down_track.append((x, i))
for i in range(x+1, R):
down_track.append((i, C-1))
for i in range(C-2, -1, -1):
down_track.append((R-1, i))
for i in range(R-2, x, -1):
down_track.append((i, 0))
for _ in range(T):
add = []
minus = []
for x, y in dusts:
able_dir = []
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < R and 0 <= ny < C and (nx, ny) not in machine:
able_dir.append((nx, ny))
qty = graph[x][y] // 5
minus.append((x, y, qty * len(able_dir)))
for X, Y in able_dir:
add.append((X, Y, qty))
for x, y, qty in add:
graph[x][y] += qty
for x, y, qty in minus:
graph[x][y] -= qty
graph[up_track[-1][0]][up_track[-1][1]] = 0
for i in range(len(up_track)-1, 0, -1):
move_before = up_track[i-1]
move_after = up_track[i]
graph[move_after[0]][move_after[1]] = graph[move_before[0]][move_before[1]]
graph[up_track[0][0]][up_track[0][1]] = 0
graph[down_track[-1][0]][down_track[-1][1]] = 0
for i in range(len(down_track)-1, 0, -1):
move_before = down_track[i-1]
move_after = down_track[i]
graph[move_after[0]][move_after[1]] = graph[move_before[0]][move_before[1]]
graph[down_track[0][0]][down_track[0][1]] = 0
dusts.clear()
# dust refill
for i in range(R):
for j in range(C):
if graph[i][j] >= 1:
dusts.append((i, j))
ans = 0
for i in range(R):
for j in range(C):
ans += graph[i][j]
print(ans+2)
공기청정기로 위아래로 순환되는 두 개의 트랙의 좌표를 관리하는 배열을 사용했다. 배열은 기존 인덱스 값이 새로운 값으로 덮어지는 것을 방지하기 위해 배열의 뒤에서부터 쉬프트했다.
트랙을 나타내는 배열의 첫, 마지막 원소에 해당하는 좌표는 항상 0의 미세먼지로 초기화된다.