아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

원 이동하기 2

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

요약
중심이 x축 위에 있고 경계가 서로 만나지 않는 원들이 주어질 때, 원 A에서 원 B로 가는 유일한 단순 경로에서 방문하는 원의 개수와 번호를 순서대로 구한다.
난이도

보통10점 중 7점

유형
트리, DFS, 정렬, 스택
정답자
아직 제출이 없습니다

문제

좌표평면에 중심이 x축 위에 있는 NN개의 원이 있다. NN개의 원 중 임의의 두 원을 골랐을 때 내접, 외접 등 교점이 존재하지 않는다. 하나의 원이 다른 원 안에 포함될 수는 있다.

하나의 원 내부에서 다른 원의 내부로 이동하려고 한다. 원 내부는 단 한 번만 방문할 수 있으며 두 번 이상 방문할 수 없다.

문제 편의상 좌표평면을 원점이 (0, 0)이고 반지름이 무수히 큰 하나의 원이라고 가정하자.

좌표평면에 두 원 A, B만 존재하는 상황에서 원 A 내부에서 원 B 내부로 올바르게 이동하는 경우는 아래와 같다.

1. 원 A와 원 B가 서로 포함관계가 아니고 만나지 않는 경우

첫 번째 경우는 원 A 내부 →\rightarrow 좌표평면 →\rightarrow 원 B 내부로 이동하였다. 이 경우를 제외한 올바른 경로는 존재하지 않는다.

2. 원 B가 원 A 안에 존재하는 경우

두 번째 경우는 원 A 내부 →\rightarrow 원 B 내부로 이동하였다. 이 경우를 제외한 올바른 경로는 존재하지 않는다.

3. 원 A가 원 B 안에 존재하는 경우

세 번째 경우도 원 A 내부 →\rightarrow 원 B 내부로 이동하였다. 이 경우를 제외한 올바른 경로는 존재하지 않는다.

아래 경우는 원 A 내부에서 원 B로 올바르게 이동하지 않은 경우들이다.

4. 좌표평면 위에 원 A, B, C가 존재하고 서로 포함관계가 아니면서 만나지 않는 경우

이 경우는 원 A 내부 →\rightarrow 좌표평면 →\rightarrow 원 C 내부 →\rightarrow 좌표평면 →\rightarrow 원 B 내부로 이동한 경로이다. 좌표평면을 2번 방문하였기 때문에 올바르게 이동한게 아니다.

4. 좌표평면 위에 원 A, B가 존재하고 원 B가 원 A의 내부에 있을 경우

이 경우는 원 A 내부 →\rightarrow 좌표평면 →\rightarrow 원 A 내부 →\rightarrow 원 B 내부로 이동한 경로이다. 원 A 내부를 2번 방문하였기 때문에 올바르게 이동한게 아니다.

좌표평면에 NN개의 원이 있을 때, 원 A 내부에서 원 B 내부로 이동할 때 방문한 원의 개수를 구해보자.

입력

첫 번째 줄에는 원의 개수 NN이 주어진다.

두 번째 줄부터 N+1N + 1번째 줄까지 원의 번호 kk와 원의 중심 좌표 중 xx좌표, 원의 반지름 rr이 공백으로 구분되어 주어진다.

마지막 줄에는 두 원의 번호 AA와 BB가 공백으로 구분되어 주어진다.

주어지는 원의 번호 중 중복되는 수는 없다.

좌표평면의 번호는 0으로 가정한다.

출력

첫 번째 줄에는 방문한 원의 개수를 출력한다.

두 번째 줄에는 방문한 원의 번호를 순서대로 공백으로 구분하여 출력한다.

제한

  • 2≤N≤200,0002 \le N \le 200,000
  • −1,000,000≤x≤1,000,000-1,000,000 \le x \le 1,000,000
  • 1≤r≤10,0001 \le r \le 10,000
  • 1≤A,B≤N1 \le A, B \le N, A≠BA \ne B
  • 1≤k≤N1 \le k \le N
  • x,rx, r는 정수

힌트

두 원의 위치관계

두 원의 위치관계를 파악할 때 아래를 이용하면 된다.

원 A의 반지름은 rAr_A, 원 B의 반지름은 rBr_B, 원 A와 원 B의 중심 사이의 거리를 dd라고 가정하자.

두 점에서 만난다.한 점에서 만난다.만나지 않는다.
외접내접외부에 있는 경우내부에 있는 경우동심원
∥rA−rB∥<d<rA+rB\|r_A-r_B\|<d<r_A+r_BrA+rB=dr_A+r_B=d∥rA−rB∥=d\|r_A-r_B\|=drA+rB<dr_A+r_B<dd<∥rA−rB∥d<\|r_A-r_B\|d=0d=0

두 점 사이의 거리

(x1,y1)(x_1, y_1)와 (x2,y2)(x_2, y_2) 사이의 거리 dd를 구하는 식은 아래와 같다.

d=(x1−x2)2+(y1−y2)2d = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2}

예제2

  1. 예제 1

    입력
    4
    1 5 4
    2 3 1
    3 6 1
    4 13 3
    2 4
    
    예상 출력
    4
    2 1 0 4
    
  2. 예제 2

    입력
    4
    1 5 4
    2 3 1
    3 6 1
    4 13 3
    2 3
    
    예상 출력
    3
    2 1 3