만드는 중입니다

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

회전하는 직선

시간 제한1초메모리 제한512 MB

요약
원점에서 시작해 반시계 방향으로 도는 직선이 점을 만날 때마다 바뀌는 회전 중심을 구하고, 질의마다 q번째 중심의 좌표를 출력합니다.
난이도

어려움10점 중 8점

유형
기하, 정렬, 시뮬레이션
정답자
아직 제출이 없습니다

문제

무한한 2차원 평면 위에 고정된 점 nn개와 회전하는 직선 하나가 주어진다. 점 중 하나는 원점 (0,0)(0, 0)이고, 직선은 처음에 yy축과 일치한다. 점들은 서로 다르지만, 세 점 이상이 한 직선 위에 놓일 수도 있다.

직선은 반시계 방향으로 회전한다. 회전 중심은 항상 주어진 nn개의 점 중 하나이며, 처음에는 원점이다. 중심은 바뀔 수 있다. 직선 위에 점이 하나뿐인 동안에는 그 점이 회전 중심이다. 직선이 다른 점에 처음 닿는 순간, 직선 위에 있는 주어진 점을 모두 (x,y)(x, y) 좌표 순으로 정렬한다. 직선 위에 점이 kk개 있고 현재 회전 중심이 그중 pp번째 점(1부터 센다)이라면, 다음 회전 중심은 그중 (k−p+1)(k - p + 1)번째 점이다. p=k−p+1p = k - p + 1이면 회전 중심은 바뀌지 않는다. 처음부터 여러 점이 직선 위에 있어도 직선은 회전을 시작한다.

qq번째 회전 중심을 구하라. 처음 중심의 번호는 0이다. 중심이 바뀌지 않는 동안에는 번호가 올라가지 않는다. 주어진 점 집합에 대해 qq번째 회전 중심이 반드시 존재함이 보장된다.

입력

첫 줄에 점의 개수를 나타내는 정수 nn이 주어진다(2≤n≤30002 \le n \le 3000).

이어지는 nn개의 줄에는 점의 좌표를 나타내는 정수 xx와 yy가 각각 주어진다(−100≤x,y≤100-100 \le x, y \le 100). 주어지는 점 중 하나는 (0,0)(0, 0)이다. 점들은 서로 다르지만, 세 점 이상이 한 직선 위에 놓일 수도 있다.

다음 줄에는 질의의 개수를 나타내는 정수 QQ가 주어진다(1≤Q≤27001 \le Q \le 2700). 이어지는 QQ개의 줄에는 정수 qiq_i가 하나씩 주어진다(0<qi≤1090 < q_i \le 10^9). 질의는 엄격하게 오름차순으로 주어진다.

출력

QQ개의 줄을 출력한다. 각 줄은 질의 하나에 대응하며, qiq_i번째 회전 중심의 좌표인 정수 두 개를 출력한다.

힌트

처음 회전 중심(0번)은 (0,0)(0, 0)이다. 1번 회전 중심은 (−1,2)(-1, 2)인데, 직선이 가장 먼저 닿는 점이기 때문이다.

그다음 직선은 (0,1)(0, 1)과 (1,0)(1, 0) 두 점에 동시에 닿아서, 직선 위에는 점이 세 개가 된다. 정렬한 순서에서 첫 번째인 (−1,2)(-1, 2)가 현재 중심이므로, 중심은 세 번째 점인 (1,0)(1, 0)으로 바뀐다. 따라서 (1,0)(1, 0)이 2번 회전 중심이다.

그다음 직선은 (−1,0)(-1, 0), (0,0)(0, 0), (2,0)(2, 0) 세 점에 닿아서, 직선 위에는 점이 네 개가 된다. 현재 중심은 정렬한 순서에서 세 번째이므로, 3번 회전 중심은 네 점 중 두 번째인 (0,0)(0, 0)이다.

같은 방식으로 4번 회전 중심은 (0,1)(0, 1)이다.

그 뒤 직선은 (−1,2)(-1, 2)와 (1,0)(1, 0) 두 점에 닿는다. 중심은 세 점 중 정렬 순서로 두 번째이므로 바뀌지 않는다.

그 뒤 직선이 (2,0)(2, 0)에 닿으므로, 5번 회전 중심은 (2,0)(2, 0)이다.

예제1

  1. 예제 1

    입력
    8
    0 0
    -1 0
    -1 2
    0 -1
    0 1
    0 2
    1 0
    2 0
    7
    1
    2
    3
    4
    5
    6
    7
    
    예상 출력
    -1 2
    1 0
    0 0
    0 1
    2 0
    -1 0
    0 1