레이저 센서
시간 제한2초메모리 제한512 MB
일반 위치에 있는 N개의 파란 점과 2N개의 빨간 점이 주어질 때, 논문이 제시한 각도 정렬 기반 재귀 Solve/Attach 절차가 만드는 교차 없는 매칭을 그대로 구성한다.
문제
정밀 측정 업체가 레이저로 멀리 떨어진 물체의 변화를 재는 장치를 여러 대 사서 서로 다른 장소에 설치했다. 장치마다 레이저 센서가 두 개 있고 센서 하나가 물체 하나를 재므로, 장치 한 대가 물체 두 개를 동시에 잰다. 서로 다른 두 장치에서 나온 레이저 빛이 만나면 서로 간섭해 측정 오류가 생기므로, 레이저 빛이 서로 교차하지 않게 구성한다.
설치한 장치의 위치를 평면 위의 파란점으로, 측정할 물체의 위치를 빨간점으로 나타내면 문제는 다음과 같다.
평면에 파란점 개와 빨간점 개가 있다. 다음 세 조건을 모두 만족하도록 점을 선분으로 이은 것을 연결 구성이라고 하자.
- 파란점은 각각 빨간점 두 개와 선분으로 이어진다.
- 빨간점은 각각 파란점 하나와 선분으로 이어진다.
- 어떤 두 선분도 서로 교차하지 않는다.

그림의 (A)에는 파란점 3개와 빨간점 6개가 있다. 1번 파란점은 1번과 4번 빨간점에, 2번 파란점은 2번과 5번 빨간점에, 3번 파란점은 3번과 6번 빨간점에 이어져 있고 어떤 두 선분도 교차하지 않으므로 (A)는 연결 구성이다. (B)는 같은 점집합의 또 다른 연결 구성이다. 즉 입력 하나에 연결 구성이 여러 개 있을 수 있다. (C)에서는 1번 파란점과 3번 빨간점을 잇는 선분이 3번 파란점과 2번 빨간점을 잇는 선분과 교차하므로 (C)는 연결 구성이 아니다.
입력 하나에 연결 구성이 여러 개 있을 수 있으므로, 출력에 적힌 절차가 만드는 연결 구성 하나를 출력한다.
입력
첫째 줄에 파란점의 개수 이 주어진다 (). 다음 개 줄 가운데 번째 줄에 번 파란점의 x좌표와 y좌표가 주어진다. 이어지는 개 줄 가운데 번째 줄에 번 빨간점의 x좌표와 y좌표가 주어진다. 좌표는 모두 이상 이하의 정수이다. 주어진 점 가운데 어떤 세 점도 한 직선 위에 있지 않다.
출력
개 줄을 출력한다. 번째 줄에는 번 파란점과 이어진 두 빨간점의 번호를 작은 수부터 공백 하나로 구분해 출력한다.
연결 구성이 여러 개일 수 있으므로 다음 절차가 만드는 구성을 출력한다. 이 절차는 필요한 번호를 항상 찾고, 절차가 만드는 연결 구성은 항상 세 조건을 만족한다.
파란점의 값을 , 빨간점의 값을 이라 하고, 점 집합의 값을 그 집합에 속한 점의 값의 합이라고 하자. 주어진 점 개의 값은 이다. 주어진 점 개 전체에 Solve를 실행한다.
Solve(), 의 값은 이다.
- 가 비어 있으면 멈춘다.
- 에서 y좌표가 가장 작은 점, 그런 점이 여럿이면 그중 x좌표가 가장 작은 점을 라고 하자. 의 나머지 점을 에서 그 점으로 향하는 벡터의 각도가 커지는 순서로 이라고 하자. 각도는 x축의 양의 방향에서 반시계 방향으로 잰다. 이 각도는 모두 이상 미만이고 서로 같은 값이 없다.
- , 라고 하자. 는 의 값이다.
- 가 파란점이면 인 가장 작은 번호를 , 인 가장 작은 번호를 이라고 하자. 를 , 과 잇는다. 그다음 과 과 에 각각 Solve를 실행한다.
- 가 빨간점이면 인 가장 큰 번호를 라고 하자. 는 파란점이다. 를 와 잇는다. 이면 Attach(; ; )와 Solve()을 실행하고, 그렇지 않으면 Solve()과 Attach(; ; )를 실행한다.
Attach(; ; ), 는 비어 있지 않고 값이 이며, 파란점 는 빨간점 하나를 더 이어야 하고, 는 밖의 점이다.
- 의 점을 에서 로 향하는 반직선과 에서 그 점으로 향하는 반직선이 에서 이루는 각이 커지는 순서로 라고 하자. 이 각은 모두 보다 크고 보다 작으며 서로 같은 값이 없다.
- , 라고 하자. 는 의 값이다.
- 인 가장 큰 번호를 라고 하자. 는 빨간점이다. 를 와 잇는다. 그다음 과 에 각각 Solve를 실행한다.