1+ N , M , K = map (int , input ().split ())
2+ fireballs = []
3+ for _ in range (M ):
4+ _r , _c , _m , _s , _d = list (map (int , input ().split ()))
5+ fireballs .append ([_r - 1 , _c - 1 , _m , _s , _d ])
6+
7+ MAP = [[[] for _ in range (N )] for _ in range (N )]
8+
9+ dx = [- 1 , - 1 , 0 , 1 , 1 , 1 , 0 , - 1 ]
10+ dy = [0 , 1 , 1 , 1 , 0 , - 1 , - 1 , - 1 ]
11+
12+ for _ in range (K ):
13+ # 파이어볼 이동
14+ while fireballs :
15+ cr , cc , cm , cs , cd = fireballs .pop (0 )
16+ nr = (cr + cs * dx [cd ]) % N # 1번-N번 행 연결되어있기 때문
17+ nc = (cc + cs * dy [cd ]) % N
18+ MAP [nr ][nc ].append ([cm , cs , cd ])
19+
20+ # 2개 이상인지 체크
21+ for r in range (N ):
22+ for c in range (N ):
23+ # 2개 이상인 경우 -> 4개의 파이어볼로 쪼개기
24+ if len (MAP [r ][c ]) > 1 :
25+ sum_m , sum_s , cnt_odd , cnt_even , cnt = 0 , 0 , 0 , 0 , len (MAP [r ][c ])
26+ while MAP [r ][c ]:
27+ _m , _s , _d = MAP [r ][c ].pop (0 )
28+ sum_m += _m
29+ sum_s += _s
30+ if _d % 2 :
31+ cnt_odd += 1
32+ else :
33+ cnt_even += 1
34+ if cnt_odd == cnt or cnt_even == cnt : # 모두 홀수이거나 모두 짝수인 경우
35+ nd = [0 , 2 , 4 , 6 ]
36+ else :
37+ nd = [1 , 3 , 5 , 7 ]
38+ if sum_m // 5 : # 질량 0이면 소멸
39+ for d in nd :
40+ fireballs .append ([r , c , sum_m // 5 , sum_s // cnt , d ])
41+
42+ # 1개인 경우
43+ if len (MAP [r ][c ]) == 1 :
44+ fireballs .append ([r , c ] + MAP [r ][c ].pop ())
45+
46+ print (sum ([f [2 ] for f in fireballs ]))
0 commit comments