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

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

로켓

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

요약
n개의 빨간 점과 n개의 흰 점을 서로 교차하지 않는 선분으로 짝지어 총 유클리드 거리를 최소로 만드는 짝을 구해 출력한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 분할 정복, 기하, 정렬
정답자
아직 제출이 없습니다

문제

평면 지도 위에 점 nn개씩으로 이루어진 두 집합 RR과 WW가 있다. R∪WR \cup W의 어떤 세 점도 한 직선 위에 있지 않다. 지대지 로켓은 RR의 점에 있고, 파괴해야 할 적 목표물은 WW의 점에 있다. 로켓은 직선으로만 날아가고, 로켓 하나가 목표물 하나를 파괴하며 목표물 하나는 로켓 하나에만 맞는다.

두 로켓의 궤적은 서로 교차하면 안 된다. 이 조건을 지키는 배정 중에서 비행 거리의 합 ∑i=1n∣riwki∣\sum_{i=1}^{n} |r_i w_{k_i}|이 가장 작은 배정을 구하라. ∣pq∣|pq|는 두 점 pp와 qq 사이의 유클리드 거리이고, wkiw_{k_i}는 로켓 rir_i가 파괴하는 목표물이다. n!n!가지 배정 가운데 비행 거리의 합이 최소인 배정은 정확히 하나라고 입력이 보장하므로, 답은 유일하다.

입력

첫째 줄에 RR과 WW의 크기 nn이 주어진다 (1≤n≤2001 \le n \le 200).

다음 2n2n개 줄에는 지도 위 한 점의 좌표 xx와 yy가 공백 하나를 사이에 두고 주어진다 (−10000≤x,y≤10000-10000 \le x, y \le 10000). 앞의 nn개 줄은 RR의 점이고, 뒤의 nn개 줄은 WW의 점이다. i+1i+1번째 줄이 rir_i, i+n+1i+n+1번째 줄이 wiw_i를 나타낸다 (1≤i≤n1 \le i \le n). 2n2n개 점은 모두 서로 다르고, 그중 어떤 세 점도 한 직선 위에 있지 않다.

출력

nn개 줄을 출력한다. ii번째 줄에는 로켓 rir_i가 파괴하는 목표물의 번호 kik_i를 출력한다.

예제3

  1. 예제 1

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

    입력
    1
    -10000 -10000
    10000 10000
    
    예상 출력
    1
    
  3. 예제 3

    입력
    2
    0 0
    2 1
    1 1
    9 3
    
    예상 출력
    1
    2