์๋ฎฌ๋ ์ด์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ์ฉ ์ด๋ํ๋ค.
- ๋ ๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ด๋ฅผ ์ก๋๋ค.
- ์์ด๊ฐ ์ด๋ํ๋ค
์์ด๋ ๊ฐ์ผํ๋ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ค๊ฐ ๊ฒฉ์ํ์ ๋ถ๋ชํ๊ฒ ๋๋ฉด ๋ฐฉํฅ์ ๋ฐ๋๋ก ๋ณ๊ฒฝํ๊ฒ ๋๋ค. ์์ด์ ์๋๋ 1000๊น์ง ์กด์ฌํ ์ ์๋๋ฐ ๊ฒฉ์ํ ํ, ์ด์ ์ต๋ ํฌ๊ธฐ๋ 100์ด๋ค. ์ฆ, ๊ฐ์ ์๋ฆฌ๋ฅผ ๊ณ์ ์ค๊ฐ ์ ์๋ค. ๊ฐ์ ์๋ฆฌ๋ฅผ ๊ณ์ ์ค๊ฐ๋ ๊ฒฝ์ฐ๋ ์ ๊ฑฐํ๊ณ ํต์ฌ ์ด๋๊ฑฐ๋ฆฌ๋ง ๊ณ์ฐํ ์ ์๋ ์๋๋ง ๋จ๊ฒจ์ผ ํ๋ค.
๋ ๋ฒ ํ๊ฒจ์ ธ์ ์ ์๋ฆฌ๋ก ๋์์ค๋ ๊ฒฝ์ฐ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์์ ๊ฐ๋ค. ์ ์ฒด ํ์ ๊ธธ์ด๋ฅผ C๋ผ๊ณ ํ์ ๋ ํ์ชฝ ๋์์ ๋๊น์ง ๊ฐ ์ ์๋ ์ด๋ํ์๋ C-1์ด๋ค. ๋ ๋ฒ ํ๊ฒจ์ ์ ์๋ฆฌ์ ์ค๊ธฐ ์ํด์๋ ํ์ชฝ ๋์์ ๋๊น์ง ๋ ๋ฒ ์ด๋ํ๋ฉด ๋๋ฏ๋ก 2x(C-1)๋งํผ์ ์ด๋ํ๊ฒ ๋๋ฉด ์ ์๋ฆฌ๋ก ๋์์ค๊ฒ ๋๋ค. ์ธ ๋ฒ, ๋ค ๋ฒ ๊ฐ์ ์๋ฆฌ๋ฅผ ์ค๊ณ ๊ฐ ์ ์์ผ๋ฏ๋ก 2x(C-1)์ ์ ์ฒด ์๋์์ ๋บ ๊ฐ์ด ์๋๋ผ ๋๋ ๋๋จธ์ง๋ง์ ์ ์ฅํ๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ด์ ์ ์๋ฆฌ๋ก ๋์์ค๋ ๊ฒฝ์ฐ๋ค์ ์ ๋ถ ์ ๊ฑฐํ๊ณ ์๋์ ๊ฐ์ด 3๊ฐ์ง์ ๋ฐฉํฅ์ฑ์ ๋ ์ ์๊ฒ ๋๋ค.
๊ฐ์ผํ๋ ์๋๋ก ๊ฐ๋ ๊ฒฉ์ํ์ ๋ฟ์ง ์์ผ๋ฏ๋ก ๋ฐฉํฅ์ด ๋ณ๊ฒฝ๋์ง ์๋๋ค. ๋ฐฉํฅ์ผ๋ก ๊ทธ๋๋ก ์ด๋ํ๋ฉด ๋๋ค.
๊ฒฉ์ํ์ ๋ถ๋ชํ ํ ๋ฒ ํ๊ฒจ์ ธ ๋ฐฉํฅ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ๋ค. ํ์ฌ ์์น์ ๊ฒฉ์ํ๊น์ง์ ๊ฑฐ๋ฆฌ๋งํผ์ ์ ์ธํ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ ํ๊ฒจ์ ธ์ ์ด๋๊น์ง ์ด๋ํ ์ ์๋์ง ์์น๋ฅผ ์๋กญ๊ฒ ๊ตฌํด์ผ ํ๋ค. ๋ฐฉํฅ ์ญ์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ ๋ฐ์ดํธ ํด์ผ ํ๋ค.
๋ฐฉํฅ์ ๋ ๋ฒ ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์ ์๋ ๋ฐฉํฅ์ ๊ทธ๋๋ก ๊ฐ๋ฆฌํค๊ฒ ๋๋ค. ํ์ฌ ์์น์์ ์ด๋ํด์ผ ํ๋ ๋ฐฉํฅ์ ์๋ ๊ฒฉ์ํ๊น์ง ์ด๋ํ๋ ๊ฑฐ๋ฆฌ + ์ ์ฒด ์ด์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํด์ ์๋์์ ์ ์ธํ ๋จ์ ์๋๋งํผ์ ๊ตฌํด์ ๋ ๋ฒ์งธ ํ๊ฒจ์ง ๊ฒฉ์ํ์์๋ถํฐ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ฉด ๋๋ค.
# ๋์์
# ๋
์ ๊ฐ๊น์ด ์์ด ๋์
def catch(j):
for i in range(R):
if arr[i][j]:
return i
return -1
# ์์ด ์ด๋ํ ์์น ์ฐพ๊ธฐ
# 3๊ฐ์ง ์ด๋ ๊ฒฝ์ฐ์ ๋ํด์ ๊ฐ๊ฐ ์ฒ๋ฆฌํ๋ค
def find_pos(r, c, s, d, z):
if d == 1:
if s<=r:
r -= s
elif s<=R-1+r:
r = s-r
d = 2
else:
r = R-1-(s-(R-1+r))
elif d == 2:
if s<=R-1-r:
r += s
elif s<=2*(R-1)-r:
r = R-1-(s-(R-1-r))
d = 1
else:
r = s-2*(R-1)+r
elif d == 4:
if s<=c:
c -= s
elif s<=C-1+c:
c = s-c
d = 3
else:
c = C-1-(s-(C-1+c))
elif d == 3:
if s<=C-1-c:
c += s
elif s<=2*(C-1)-c:
c = C-1-(s-(C-1-c))
d = 4
else:
c = s-2*(C-1)+c
return r, c, s, d, z
# ์์ด ์ด๋
def move(arr):
tmp = [[[] for _ in range(C)] for _ in range(R)]
for i in range(R):
for j in range(C):
if arr[i][j]:
r, c, s, d, z = find_pos(i, j, *arr[i][j])
# ๋ง์ฝ ์์ด๊ฐ ์ด๋ฏธ ์นธ์ ์กด์ฌํ๋๋ฐ ํ์ฌ ๋ค์ด์ฌ ์์ด๋ณด๋ค ํฌ๊ธฐ๊ฐ ๋ ํฌ๋ค๋ฉด ๊ทธ๋ฅ ๋์ด๊ฐ๊ธฐ
if tmp[r][c] and tmp[r][c][2] > z:
continue
tmp[r][c] = [s, d, z]
return tmp
R, C, M = map(int, input().split())
arr = [[[] for _ in range(C)] for _ in range(R)]
for _ in range(M):
r, c, s, d, z = map(int, input().split())
if d in (1, 2):
s %= 2*(R-1)
else:
s %= 2*(C-1)
arr[r-1][c-1] = [s, d, z]
res = 0
for j in range(C):
i = catch(j)
if i != -1:
res += arr[i][j][2]
arr[i][j] = []
arr = move(arr)
print(res)