만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

우주 볼링

시간 제한2초메모리 제한1024 MB

요약
삼각형 모양으로 배치된 n개 행의 원기둥 핀과 직선으로 움직이는 공이 주어질 때, 공이 닿는 핀의 개수를 센다.
난이도

어려움10점 중 8점

유형
기하, 수학, 구현, 이분 탐색
정답자
아직 제출이 없습니다

문제

행성 플류크에 새로운 우주 볼링장이 문을 열었다. 볼링장의 경기장은 무한한 평면이고, 그 위에 핀들이 배치되어 있다.

각 핀은 반지름이 rr미터인 원을 밑면으로 하는 높은 원기둥이다. 모든 핀은 서로 같다. 핀은 다음 규칙에 따라 배치된다. 핀은 nn개의 줄을 이루고, 첫 번째 줄에는 핀 하나가, 두 번째 줄에는 둘, 이런 식으로 놓인다. 마지막 nn번째 줄에는 nn개의 핀이 놓인다. 평면 위에 좌표계를 도입하되, 단위 길이가 1킬로미터가 되도록 한다. 첫 번째 줄에 있는 유일한 핀의 중심은 점 (0,0)(0, 0)에 있다. 두 번째 줄에 있는 핀의 중심은 점 (−1,1)(-1, 1)과 (1,1)(1, 1)에 있다. 따라서 ii번째 줄에 있는 핀의 중심은 좌표가 (−(i−1),i−1)(-(i - 1), i - 1), (−(i−3),i−1)(-(i - 3), i - 1), …\ldots, (i−1,i−1)(i - 1, i - 1)인 점에 있다.

경기는 다음과 같이 진행된다. 반지름이 qq미터인 공을 사용한다. 플레이어는 공의 중심의 초기 위치 (xc,yc)(x_c, y_c)와 공의 이동 방향 벡터 (vx,vy)(v_x, v_y)를 고른다. 그런 다음 공을 초기 위치에 놓고, 벡터 (vx,vy)(v_x, v_y) 방향으로 멈추지 않고 움직인다. 공이 움직이는 동안 공과 핀이 한 점이라도 공유하는 순간이 있으면, 공이 그 핀을 쓰러뜨린 것으로 본다. 쓰러진 핀은 공의 이동 방향을 바꾸지 않고, 넘어질 때 옆 핀을 쓰러뜨리지도 않는다.

그림은 r=500r = 500, n=4n = 4일 때의 핀 배치와 q=1000q = 1000, xc=−2x_c = -2, yc=−2y_c = -2, vx=1v_x = 1, vy=1v_y = 1인 공의 예를 보여준다.

핀의 반지름 rr, 핀 줄의 수 nn, 공의 반지름 qq, 공의 초기 위치 (xc,yc)(x_c, y_c), 이동 방향 벡터 (vx,vy)(v_x, v_y)가 주어졌을 때 공이 쓰러뜨린 핀의 개수를 구하는 프로그램을 작성해야 한다.

입력

입력 파일의 첫 번째 줄에는 정수 두 개 rr과 nn이 정확히 공백 하나를 사이에 두고 주어진다 (1≤r≤7001 \le r \le 700, 1≤n≤200 0001 \le n \le 200\,000).

입력 파일의 두 번째 줄에는 정수 qq가 주어진다 (1≤q≤1091 \le q \le 10^9).

입력 파일의 세 번째 줄에는 정수 두 개 xcx_c와 ycy_c가 정확히 공백 하나를 사이에 두고 주어진다 (−106≤xc≤106-10^6 \le x_c \le 10^6, −106≤yc-10^6 \le y_c, 1000×yc<−(r+q)1000 \times y_c < -(r + q)).

입력 파일의 네 번째 줄에는 정수 두 개 vxv_x와 vyv_y가 정확히 공백 하나를 사이에 두고 주어진다 (−106≤vx≤106-10^6 \le v_x \le 10^6, 0<vy≤1060 < v_y \le 10^6).

출력

출력 파일에는 쓰러뜨린 핀의 개수 하나를 정수로 출력한다.

힌트

아래 그림은 어떤 핀이 쓰러지는지를 보여준다 (그런 핀은 «х»로 표시되어 있다).

예제1

  1. 예제 1

    입력
    500 4
    1000
    -2 -2
    1 1
    
    예상 출력
    7