-N*N사이즈의 땅에 M개의 나무를 심고 아래 작업을 K년간 반복한다.
이후 살아있는 나무의 수를 출력한다. ( 초기 땅의 양분은 전부 5이다. )
봄 : 나무가 자신의 나이만큼 양분을 먹고 나이가 1 증가한다. 양분이 부족하면 죽는다.
여름 : int(죽은 나무들의 나이/2)만큼 땅에 양분을 추가하고 죽은 나무가 사라진다.
가을 : 나이가 5의 배수인 나무가 있다면 인접 8개의 칸에 나무가 1인 나무를 추가한다.
겨울 : 모든 땅에 주어진 양()만큼 양분을 추가한다.
import sys
def main():
N, M, K = map(int, sys.stdin.readline().rstrip().split())
fertilizer = [[5]*(N+1) for _ in range(N+1)]
trees = [[[] for _ in range(N+1)] for _ in range(N+1)]
A = []
for _ in range(N):
A.append(list(map(int, sys.stdin.readline().rstrip().split())))
for _ in range(M):
x, y, z = map(int, sys.stdin.readline().rstrip().split())
trees[x][y].append(z)
for _ in range(K):
#봄 and 여름
for i in range(1,N+1):
for j in range(1,N+1):
for k in reversed(range(len(trees[i][j]))):
if trees[i][j][k] <= fertilizer[i][j]:
fertilizer[i][j] -= trees[i][j][k]
trees[i][j][k] += 1
continue
for dead_tree in trees[i][j][:k+1]:
fertilizer[i][j] += dead_tree//2
trees[i][j] = trees[i][j][k+1:]
break
#가을
for i in range(1,N+1):
for j in range(1,N+1):
for tree in trees[i][j]:
if tree%5 == 0:
for dx, dy in [(1,1),(1,0),(1,-1),(0,-1),(0,1),(-1,-1),(-1,0),(-1,1)]:
if 0 < i+dx < N+1 and 0 < j+dy < N+1:
trees[i+dx][j+dy].append(1)
#겨울
for i in range(1,N+1):
for j in range(1,N+1):
fertilizer[i][j] += A[i-1][j-1]
count = 0
for i in range(1,N+1):
for j in range(1,N+1):
count += len(trees[i][j])
print(count)
main()