ํฐ์คํ ๋ฆฌ ๋ทฐ
๐จ๐ป ์ฝ๋ฉํ
์คํธ/๋ฐฑ์ค
๋ฐฑ์ค: 20056 ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด๋ณผ
dirmathfl 2021. 4. 5. 17:40728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์ ๋ ฅ๊ฐ์ผ๋ก ํ์ด์ด๋ณผ์ ์์น (r, c), ์ง๋(m), ๋ฐฉํฅ(d), ์๋ ฅ(s)์ด ์ฃผ์ด์ง๋ค. ์๋ฎฌ๋ ์ด์ ๋ฌธ์ ์ด๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ์์ฐจ์ ์ผ๋ก ์งํํ๋ค.
- ๋ชจ๋ ํ์ด์ด๋ณผ์ ์์ ์ ๋ฐฉํฅ์ผ๋ก ์๋ ฅ๋งํผ ์ด๋ํ๋ค.
- ์ด๋์ ๋ง์น ํ, ์ด๋๋ ํ์ด์ด๋ณผ๋ค์ด ๊ฐ์ ์นธ์ 2๊ฐ ์ด์ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํ๋ค.
- ํ์ด์ด๋ณผ์ 4๊ฐ๋ก ๋๋์ด์ง๋ค.
- ๋๋์ด์ง ํ์ด์ด๋ณผ์ ์ง๋, ์๋ ฅ, ๋ฐฉํฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ง๋์ `ํฉ์ณ์ง ํ์ด์ด๋ณผ ์ง๋์ ํฉ / 5`์ด๋ค.
- ์๋ ฅ์ `ํฉ์ณ์ง ํ์ด์ด๋ณผ ์๋ ฅ์ ํฉ / ํฉ์ณ์ง ํ์ด์ด๋ณผ์ ๊ฐ์`์ด๋ค.
- ํฉ์ณ์ง๋ ํ์ด์ด๋ณผ์ ๋ฐฉํฅ์ด ๋ชจ๋ ํ์์ด๊ฑฐ๋ ๋ชจ๋ ์ง์์ด๋ฉด, ๋ฐฉํฅ์ `0, 2, 4, 6`์ด ๋๋ค.
- ์๋๋ผ๋ฉด `1, 3, 5, 7`์ด ๋๋ค.
- ์ง๋์ด 0์ธ ํ์ด์ด๋ณผ์ ์๋ฉธ๋์ด ์์ด์ง๋ค.
์์ ๊ฐ์ ์๋ฎฌ๋ ์ด์ ์ K๋ฒ ์ํํ ํ, ๋จ์์๋ ํ์ด์ด๋ณผ ์ง๋์ ํฉ์ ๊ตฌํด์ ์ถ๋ ฅํ๋ฉด ์ ๋ต์ ์ฐพ์ ์ ์๋ค.
์ฝ๋
from sys import stdin
from copy import deepcopy
X = 0
Y = 1
M = 2
S = 3
D = 4
def move_fire_ball():
global board
for idx, info in enumerate(fire_ball):
dx, dy = dirs[info[D]]
# ์์ ์ ๋ฐฉํฅ์ ์๋ ๋งํผ ์ด๋ํ๋ฏ๋ก ํ์ฌ ์์น + ๋ฐฉํฅ * ์๋
# ๊ฒฉ์์ ํ๊ณผ ์ด์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฏ๋ก, %๋ก ์์น๋ฅผ ์ฐพ์
next_x, next_y = (info[X] + dx * info[S]) % n, (info[Y] + dy * info[S]) % n
if board[next_x][next_y] is None:
board[next_x][next_y] = [idx]
else:
board[next_x][next_y].append(idx)
info[X], info[Y] = next_x, next_y
def calc_file_ball(temp, fireballs, loc):
# ์ง๋๊ณผ ์๋์ ํฉ
sum_m, sum_s = 0, 0
even, odd = True, True
for idx in fireballs:
sum_m += fire_ball[idx][M]
sum_s += fire_ball[idx][S]
if not fire_ball[idx][D] % 2:
odd = False
else:
even = False
cal_m = sum_m // 5
cal_s = sum_s // len(fireballs)
# ์ง๋์ด ์๋ ๊ฒฝ์ฐ์๋, ์๋์ ๊ฐ์ ์ฐ์ฐ์ด ํ์ ์์
if cal_m:
x, y = loc
# mp -> multiplier
for mp in range(4):
# ํ์ด์ด๋ณผ์ ๋ฐฉํฅ์ด ๋ชจ๋ ์ง์๋ ํ์์ธ ๊ฒฝ์ฐ (0, 2, 4, 6)
if even or odd:
temp.append([x, y, cal_m, cal_s, 2 * mp])
# ์๋ ๊ฒฝ์ฐ (1, 3, 5, 7)
else:
temp.append([x, y, cal_m, cal_s, 2 * mp + 1])
def sum_fire_ball():
global fire_ball
temp = []
for x in range(n):
for y in range(n):
# ํด๋น ์์น์ fireball์ด ์๋ ๊ฒฝ์ฐ
if board[x][y] is None:
continue
# ํค๋ฉ ์์น์ fireball์ด ํ๋์ธ ๊ฒฝ์ฐ
elif len(board[x][y]) == 1:
cur_idx = board[x][y][0]
temp.append(fire_ball[cur_idx])
# ํด๋น ์์น์ fireball์ด ๋ ๊ฐ ์ด์์ธ ๊ฒฝ์ฐ
else:
calc_file_ball(temp, board[x][y], (x, y))
board[x][y] = None
fire_ball = deepcopy(temp)
if __name__ == '__main__':
n, m, k = map(int, stdin.readline().split())
# 8๋ฐฉํฅ์ผ๋ก ์ด๋์ด ํ์ํ๋ฏ๋ก
dirs = ((-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1), (0, -1), (-1, -1))
board = [[None] * n for _ in range(n)]
fire_ball = [None] * m
for idx in range(m):
cur_info = list(map(int, stdin.readline().split()))
cur_info[X] -= 1
cur_info[Y] -= 1
fire_ball[idx] = cur_info
for _ in range(k):
move_fire_ball()
sum_fire_ball()
print(sum(map(lambda x: x[M], fire_ball)))
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 17485 ์ง์ฐ์ ๋ฌ ์ฌํ (Large) (0) | 2021.04.09 |
---|---|
๋ฐฑ์ค: 1106 ํธํ (0) | 2021.04.07 |
๋ฐฑ์ค: 17135 ์บ์ฌ ๋ํ์ค (0) | 2021.04.04 |
๋ฐฑ์ค: 2186 ๋ฌธ์ํ (0) | 2021.04.02 |
๋ฐฑ์ค: 20057 ๋ง๋ฒ์ฌ ์์ด์ ํ ๋ค์ด๋ (0) | 2021.03.31 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ