n, m, t = map(int, input().split())
circle = [list(map(int, input().split())) for _ in range(n)]
x = [0] * t
d = [0] * t
k = [0] * t
di = [-1, 1, 0, 0]
dj = [0, 0, -1, 1]
for i in range(t):
x[i], d[i], k[i] = map(int, input().split())
def rotate(circle, nx, nd, nk):
for i in range(n):
if (i + 1) % nx == 0:
if nd == 0:
nnd = 1
else:
nnd = -1
tmp_row = [0] * m
for j in range(0, len(circle[i])):
tmp_row[(j+nk*nnd) % m] = circle[i][j]
circle[i] = tmp_row
return circle
def check(circle):
circle_tmp = [[0] * m for _ in range(n)]
for i in range(n):
for j in range(m):
circle_tmp[i][j] = circle[i][j]
cnt = 0
for i in range(n):
for j in range(m):
if circle[i][j] == 0:
continue
for k in range(4):
if i + di[k] >= n or i + di[k] < 0:
continue
ni, nj = (i + di[k])%n, (j + dj[k])%m
if circle[ni][nj] == circle[i][j]:
cnt += 1
circle_tmp[ni][nj] = 0
circle_tmp[i][j] = 0
if cnt == 0:
csum = 0
ccnt = 0
for i in range(n):
for j in range(m):
if circle_tmp[i][j] != 0:
csum += circle_tmp[i][j]
ccnt += 1
if ccnt != 0:
csum /= ccnt
for i in range(n):
for j in range(m):
if circle_tmp[i][j] == 0:
continue
if circle_tmp[i][j] > csum:
circle_tmp[i][j] -= 1
elif circle_tmp[i][j] < csum:
circle_tmp[i][j] += 1
return circle_tmp
time = 0
while True:
if time == t:
break
circle = rotate(circle, x[time], d[time], k[time])
circle = check(circle)
time += 1
ans = 0
for i in range(n):
ans += sum(circle[i])
print(ans)
바뀌면 안되는 것 구분!! 기준이 되는 것은 바뀌면 안됨 -> circle_tmp를 만들어줌
그리고 zero division 도 나누기 할 때는 꼭 생각해야됨...