시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 256 MB24522179.714%

문제

하이비는 최근 보물 찾기라는 게임에 빠졌다.

이 게임은 2차원 평면에서 진행되며, 플레이어의 시작 위치와 보물의 위치, 그리고 보물의 위치로 가기 위해 쓰이는 $ N $개의 보조점이 주어진다. 보조점은 $ 1 $번부터 $ N $번까지 번호가 매겨져있다.

하이비는 커맨드를 $ N $번 입력할 수 있으며, 각 커맨드는 $ 0 $ 이상 $ 1 $ 이하의 실수이다.

하이비가 $ i $번째 커맨드로 $ r $을 입력할 때, 플레이어는 아래와 같이 이동한다.

  • 현재 플레이어의 위치를 $ (x_p, y_p) $, $ i $번째 보조점의 위치를 $ (x_i, y_i) $라고 하자.
  • 커맨드가 입력된 뒤, 플레이어는 그 두 점을 $ 1-r : r $로 내분하는 점으로 이동한다.
  • 즉, 플레이어는 $ ((1-r) \cdot x_p + r \cdot x_i, (1-r) \cdot y_p + r \cdot y_i) $로 이동한다.

$ N $개의 커맨드를 모두 입력한 뒤 플레이어의 위치가 보물의 위치와 같다면 게임이 클리어된다.

하이비는 이 게임이 너무 재밌어서 초기 상태가 주어질 때 게임을 자동으로 클리어해주는 프로그램을 만들기로 했다.

입력

첫째 줄에는 보조점의 개수 $ N $이 주어진다. $( 0 \le N \le 300\,000 )$

둘째 줄에는 출발점의 위치 $ (x_s, y_s) $이 주어진다.

셋째 줄부터 $ N $개의 줄에 걸쳐 보조점의 위치 $ (x_i, y_i) $가 1번부터 차례대로 주어진다.

$ N+3 $번째 줄에는 보물의 위치 $ (x_t, y_t) $가 주어진다.

입력으로 주어지는 모든 좌표는 $ -10^9 $ 이상 $ 10^9 $ 이하의 정수이다.

출력

만약 보물의 위치로 갈 수 있다면, 첫째 줄에 YES를 출력한 뒤 둘째 줄에 보물을 찾기 위해 입력해야 하는 커맨드를 공백으로 구분하여 1번부터 출력한다.

만약 보물을 찾을 수 없다면 첫째 줄에 NO를 출력한다.

커맨드대로 움직였을 때의 플레이어의 최종 위치를 $ (x_e, y_e) $, 보물의 위치를 $ (x_t, y_t) $라고 하자. 이 때, $ \max\left( \frac{|x_e-x_t|}{\max(|x_t|,1)}, \frac{|y_e-y_t|}{\max(|y_t|,1)} \right) \le 10^{-6} $라면 정답으로 처리된다. 다르게 말하자면, 두 좌표의 절대/상대오차가 $ 10^{-6} $ 이하이면 정답으로 처리된다.

예제 입력 1

5
0 0
2 0
0 2
-2 0
-1 -2
1 -2
-1 -1

예제 출력 1

YES
0.5
0.666666666666667
0.8
0.5
0.117647058823529

예제 입력 2

5
0 0
2 0
0 2
-2 0
-1 -2
1 -2
-2 -1

예제 출력 2

NO

예제 입력 3

3
1 1
5 5
1 5
5 1
3 2

예제 출력 3

YES
0.25
0.2
0.375

출처

University > 한양대학교 > 제9회 한양대학교 프로그래밍 경시대회 > Advanced Division H번