μ°¨λ‘μ°¨λ‘ κ°μ νμΈνκ³ , μ§λμ μ λ ₯νλ μμ μ νλ©΄, μλ νμ°μν€λ €λ λ¨Όμ§μ μμ΄ λ³κ²½λλ€.
β μ°¨λ‘μ°¨λ‘ νμ°λλ κ²μ΄ μλλΌ νκΊΌλ²μ νμ°μ΄ λμ΄μΌνλ―λ‘, λ¨Όμ§μ μμ κ·Έλλ‘ μ μ§νκΈ°μν΄ λ¨Όμ§ λ¦¬μ€νΈλ₯Ό λ§λ€μ΄μ ν¨μμ λ겨μ€λ€.
곡기μ²μ κΈ°λ₯Ό μλνλ μμ
μ μμμλΆν°νλ©΄ 3, 4, 6 β 3, 3, 6 β 3, 3, 3 λ€μκ³Ό κ°μ΄ κ°μ΄ λ³λμ΄ μΌμ΄λλ€κ³ μκ°νλ€.
β λ€μμλΆν° μμ
νλ©΄, 3, 4, 6, 7, 8 β 3, 4, 6, 7, 7 β 3, 4, 6, 6, 7 β 3, 4, 4, 6, 7 ... μΌλ‘ μ μμ μΌλ‘ μλλλ€.
room[i][0] = room[i-1][0] λ€μκ³Ό κ°μ΄ μ½λλ₯Ό μμ±ν΄λ κ°μ λ³κ²½μ΄ μΌμ΄λμ§ μλλ€.κ²½κ³κ°μ κ° κ²½μ°λ§λ€ μ, μλ, μ’, μ°λ‘ μ΄λνλλ‘ μ½λλ₯Ό μ§μ£Όμλ€.νλμ© λ²μλ₯Ό κ³ λ €νλ€λ³΄λκΉ μκ°μ΄ μ€λ κ±Έλ Έλ€. λ€λ₯Έ λ°©λ²μ΄ μμκΉ?
곡기μ²μ κΈ°μ μ€λ₯Έμͺ½μμ μμνκ³ κ°κ°μ λ°©ν₯μ λ°λΌμ indexλ₯Ό μ‘°μ ν΄μ€λ€.
λ§μ½ x,yλ‘ μ΄λνλ€κ° λ²½μ λΏλλ€λ©΄ indexλ₯Ό μ‘°μ νμ¬ λ°©ν₯μ λ°κΏμ€λ€.
β μ΄ λΆλΆμ΄ ν€ ν¬μΈνΈμ΄λ€!
swapλ°©μμΌλ‘ tempμ κ°μ μ μ₯νκ³ μ΄λ₯Ό λ€μ κ°μ μ λ¬νλ ννλ‘ νμΉΈμ© λ―Έλ€μ£Όμλ€.
β μ΄? μκ°ν΄λ³΄λ μ΄μ§νΌ tempλ₯Ό μ¬μ©νλ€λ©΄, κ΅³μ΄ λ€μμλΆν° μν΄λλλ€?
β tempλ₯Ό μ¬μ©νλ λ°©μμ μ κΈ°μ΅ν΄λμ!
dx = [-1,0,1,0] # μ μ° ν μ’
dy = [0,1,0,-1]
def clean(a,b):
# μμ νμ
x, y = a, 1
index = 1 # μ°λΆν° μμ μ° μ μ’ ν
temp = 0 # 곡기μ²μ κΈ°μμ λμ€λ λ°λ
while True:
nx = x+dx[index]
ny = y+dy[index]
if nx==R or ny == C or nx==-1 or ny==-1: # λ²½μ λΏμμ λ
index = (index-1)%4
continue
if x==a and y==0: # 곡기μ²μ κΈ°λ‘ λ€μ λμμ΄
break
pan[x][y], temp = temp, pan[x][y] # swap
x,y = nx, ny
# μλ νμ
x, y = b, 1
index = 1 # μ°λΆν° μμ μ° ν μ’ μ
temp = 0 # 곡기μ²μ κΈ°μμ λμ€λ λ°λ
while True:
nx = x+dx[index]
ny = y+dy[index]
if nx==R or ny == C or nx==-1 or ny==-1: # λ²½μ λΏμμ λ
index = (index+1)%4
continue
if x==b and y==0: # 곡기μ²μ κΈ°λ‘ λ€μ λμμ΄
break
pan[x][y], temp = temp, pan[x][y] # swap
x,y = nx, ny
# νμ°
def spread(dust):
for i in range(len(dust)):
amount = dust[i][2] // 5
cnt = 0
for j in range(4):
nx = dust[i][0] + dx[j]
ny = dust[i][1] + dy[j]
if nx < 0 or nx >= r or ny < 0 or ny >= c or room[nx][ny] == -1:
continue
room[nx][ny] += amount
cnt += 1
room[dust[i][0]][dust[i][1]] -= amount * cnt
# 곡기μ²μ κΈ° μλ : λ€μμλΆν°?
def work(x, mode):
if mode == 0:
for i in range(x-1, 0, -1):
room[i][0] = room[i-1][0]
for i in range(c-1):
room[0][i] = room[0][i+1]
for i in range(x):
room[i][c-1] = room[i+1][c-1]
for i in range(c-1, 0, -1):
if room[x][i-1] == -1:
room[x][i] = 0
break
room[x][i] = room[x][i-1]
else:
for i in range(x+1, r-1):
room[i][0] = room[i+1][0]
for i in range(c-1):
room[r-1][i] = room[r-1][i+1]
for i in range(r-1, x, -1):
room[i][c-1] = room[i-1][c-1]
for i in range(c-1, 0, -1):
if room[x][i-1] == -1:
room[x][i] = 0
break
room[x][i] = room[x][i - 1]
import sys
input = sys.stdin.readline
r, c, t = map(int, input().split())
room = [list(map(int, input().split())) for _ in range(r)]
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
for i in range(t):
dust = []
for j in range(r):
for k in range(c):
if room[j][k] != 0 and room[j][k] != -1:
dust.append((j, k, room[j][k]))
spread(dust)
index = 0
for j in range(r):
if room[j][0] == -1:
work(j, index)
index += 1
answer = 0
for i in range(r):
answer += sum(room[i])
# -1 2κ° λΉΌμ£ΌκΈ°
print(answer+2)