dx = [-1, -1, 0, 1, 1, 1, 0, -1]
dy = [0, 1, 1, 1, 0, -1, -1, -1]
n, m, k = map(int, input().split())
g = [[[] * n for _ in range(n)] for _ in range(n)]
for _ in range(m):
r, c, m, s, d = map(int, input().split())
g[r-1][c-1].append((m, s, d))
def move(g):
tmp_g = [[[] * n for _ in range(n)] for _ in range(n)]
for i in range(n):
for j in range(n):
if len(g[i][j]) == 0:
continue
for k in range(len(g[i][j])):
fs = g[i][j][k][1]
fd = g[i][j][k][2]
ni, nj = (i + (dx[fd]*fs))%n, (j + (dy[fd]*fs))%n
tmp_g[ni][nj].append((g[i][j][k]))
return tmp_g
def div_ball(balllist):
tmp_balllist = []
sum_m = 0
sum_s = 0
sum_d = 0
for i in range(len(balllist)):
bm = balllist[i][0]
bs = balllist[i][1]
bd = balllist[i][2]
sum_m += bm
sum_s += bs
sum_d += bd
input_m = int(sum_m/5)
if input_m == 0:
return tmp_balllist
input_s = int(sum_s/len(balllist))
for i in range(4):
tmp_balllist.append((input_m, input_s, ((i*2)+(sum_d)%2)))
return tmp_balllist
turn = 0
while True:
turn += 1
if turn == k+1:
break
g = move(g)
for i in range(n):
for j in range(n):
if len(g[i][j]) >= 2:
g[i][j] = div_ball(g[i][j])
ans = 0
for i in range(n):
for j in range(n):
if len(g[i][j]) == 0:
continue
for k in range(len(g[i][j])):
dd = g[i][j][k][0]
ans += dd
print(ans)
처음 짠 코드 : 0%대에 틀림
(방향이 모두 짝수거나 모두 홀수면) -> 0, 2, 4, 6
(그 외) -> 1, 3, 5, 7
인데 이상하게 생각함
그렇다고 합으로 하면 안되는게 짝+짝+짝+짝도 합이 짝수지만 홀+홀+짝+짝도 합이 짝수다
하나하나 따져줘야함. 문제를 잘 보면 다 나와있다!!!!!!!!!!
dx = [-1, -1, 0, 1, 1, 1, 0, -1]
dy = [0, 1, 1, 1, 0, -1, -1, -1]
n, m, k = map(int, input().split())
g = [[[] * n for _ in range(n)] for _ in range(n)]
for _ in range(m):
r, c, m, s, d = map(int, input().split())
g[r-1][c-1].append((m, s, d))
def move(g):
tmp_g = [[[] * n for _ in range(n)] for _ in range(n)]
for i in range(n):
for j in range(n):
if len(g[i][j]) == 0:
continue
for k in range(len(g[i][j])):
fs = g[i][j][k][1]
fd = g[i][j][k][2]
ni, nj = (i + (dx[fd]*fs))%n, (j + (dy[fd]*fs))%n
tmp_g[ni][nj].append((g[i][j][k]))
return tmp_g
def div_ball(balllist):
tmp_balllist = []
sum_m = 0
sum_s = 0
allodd = 0
alleven = 0
for i in range(len(balllist)):
bm = balllist[i][0]
bs = balllist[i][1]
bd = balllist[i][2]
sum_m += bm
sum_s += bs
if bd % 2 == 0:
alleven += 1
else:
allodd += 1
input_m = int(sum_m/5)
if input_m == 0:
return tmp_balllist
input_s = int(sum_s/len(balllist))
# 모두 짝수이거나 모두 홀수일 때
if alleven == len(balllist) or allodd == len(balllist):
for i in range(4):
tmp_balllist.append((input_m, input_s, i*2))
return tmp_balllist
# 나머지
else:
for i in range(4):
tmp_balllist.append((input_m, input_s, i*2+1))
return tmp_balllist
turn = 0
while True:
turn += 1
if turn == k+1:
break
g = move(g)
for i in range(n):
for j in range(n):
if len(g[i][j]) >= 2:
g[i][j] = div_ball(g[i][j])
ans = 0
for i in range(n):
for j in range(n):
if len(g[i][j]) == 0:
continue
for k in range(len(g[i][j])):
dd = g[i][j][k][0]
ans += dd
print(ans)