문제1680--바둑돌 튕기기

1680: 바둑돌 튕기기

[만든사람 : 이건우]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명


10 x 10 바둑판에서 바둑돌을 튕기는 게임을 하고자 한다!
바둑판 끝에는 벽이 세워져있어 닿으면 튕기는 성질이 있다.
 
바둑돌은 그림과 같이 네모 안에 위치에 있다. (검은 돌은 (6,2)에 위치에 있다.)

바둑돌은 모서리(0,0),(9,0),(0,9),(9,9)를 제외한 자리에서 튕길 수 있다.
튕길 때에는 좌측상단, 우측상단, 우측하단, 좌측 하단 방향으로 튕길 수 있다.



바둑돌에는 무게와 속도가 있으며, 움직일 때마다 속도가 줄어든다.
바둑돌이 벽에 닿을 경우 반대 방향으로 튕기는 성질을 가진다.

다음은 (0,3)에서 우측 하단 방향으로 12의 속도로 튕겨서 (6,3)으로 이동한 예시이다.
속도는 이동할 때마다 1씩 줄어드며 0이 되는 순간 정지한다.

 (만일 튕겨서 이동한 위치가 모서리인 (0,0),(9,0),(0,9),(9,9) 의 경우 반대 방향으로 튕긴다.)

그런데 다른 바둑돌(장애물)과 충돌하는 경우도 있다.

충돌할 경우 다음과 같은 규칙을 따른다.
 무게 x 속도 = 장애물 무게 -> 정지
무게 x 속도 < 장애물 무게 -> 왔던 방향으로 튕김
무게 x 속도 > 장애물 무게 -> 장애물이랑 같이 같은 방향으로 한 칸 이동 이동
(장애물 이동 후에도 위의 규칙을 그대로 이행)
(단, 이동 당한 장애물이 또 다른 장애물이랑 충돌하거나 벽에 충돌 할 경우 이동 당하고 있는 장애물은 파괴된다.)
(파괴시킨 이후에도 속도가 남아있으면 위와 같은 규칙을 가지고 똑같이 이동한다.)

충돌의 정의는 두 가지가 있다.
1. 내가 이동할 방향에 이미 다른 바둑돌(장애물)이나 있을 경우
2. 내가 이동할 방향이 바둑판 끝이라 다음 이동 방향이 튕겨지는 경우
 
예1
(0,3)에서 우측 하단 방향으로 속도는 5, 무게는 5인 바둑돌을 튕긴다.

(4,7)에는 무게가 10인 바둑돌이 놓여져있다.




예2
(0,3)에서 우측 하단 방향으로 속도는 11, 무게는 5인 바둑돌을 튕긴다.
(4,7)에는 무게가 45인 바둑돌이 놓여져있다.


예3
(0,3)에서 우측 하단 방향으로 속도는 11, 무게는 5인 바둑돌을 튕긴다.
(4,7)에는 무게가 5인 바둑돌이 놓여져있다.


위 예시는 속도가 줄어들다가 “무게 x 속도 > 장애물 무게” 조건을 만족시키기에 계속 밀리다가 결국 장애물을 파괴되는 예시이다.


예 4
복잡한 상황속 예시이다.
해당 예시는 6개의 장애물(바둑돌)을 파괴하고 4개의 바둑돌(검은돌 포함)을 남긴 예시이다.
마지막에서는 속도가 남았음에도 “무게 x 속도 = 장애물 무게” 조건을 만족시켜 정지한 경우다.
바둑돌 안에 있는 숫자는 바둑돌의 무게다.



입력 설명

첫 번째 줄에 내가 튕길 돌의 x축, y축, 방향, 속도, 무게를 입력한다.
x y 방향 속도 무게


값 입력 범위
x축 (0~9)
y축 (0~9)
방향(0~3) => 0: 좌측 상단 / 1: 우측 상단 / 2: 우측 하단 / 3: 좌측 하단
속도(1~100)
무게(1~100)
 
두 번째 줄에 이미 놓여 있는 돌의 개수를 입력 받는다. (0 ~ 50)
(단, 튕길 돌의 시작위치랑 겹치지 않게 입력된다.)
 
세 번째 줄부터 이미 놓여져 있는 돌의 좌표와 무게가 입력된다.
x y 무게

출력 설명

첫 번째 줄에 바둑돌의 최종 도착 지점의 x,y 좌표를 출력한다.
두 번째 줄에 바둑판에 남아있는 바둑돌의 개수를 출력한다. 
(내가 튕긴 바둑돌 포함)

입력 예시 Copy

3 5 1 5 10
1
6 2 20

출력 예시 Copy

6 2
2

출처/분류