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

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

울타리 설계

메모리 제한1024 MB

요약
일반 위치에 있는 N개의 기둥과 서로 교차하지 않는 기존 울타리 두 개가 주어질 때, 서로 교차하지 않는 울타리를 최대한 많이 추가하고 그 목록을 출력한다.
난이도

보통10점 중 7점

유형
기하, 그리디, 정렬, 조합론
정답자
아직 제출이 없습니다

문제

당신은 울타리 건설 회사의 임시 직원으로 고용되어 들판의 울타리 설계를 마무리하는 일을 맡았다. 각 울타리는 두 기둥 사이를 직선으로 이어야 한다. 각 기둥은 한 점을 차지하며 기둥의 위치는 고정되어 있다. 세 기둥이 한 직선 위에 있는 경우는 없다. 울타리끼리는 끝점(기둥)에서만 만날 수 있고, 그 외에는 교차할 수 없다.

다른 사람이 설계를 시작했지만 울타리 두 개를 추가한 뒤 그만두었다. 당신은 그 설계를 마무리해야 한다. 상사와 고객에게 좋은 인상을 주기 위해, 울타리 길이와 상관없이 최대한 많은 울타리를 만들고 싶다.

기둥의 위치와 이미 만들어진 울타리가 주어질 때, 어떤 울타리 쌍(새로 추가한 것과 기존 것 모두)도 끝점(기둥)에서만 만나고 그 외에는 교차하지 않도록 울타리를 최대한 많이 추가하는 방법을 구하라.

입력

입력의 첫 줄에는 테스트 케이스의 수 T가 주어진다. T개의 테스트 케이스가 뒤따른다. 각 테스트 케이스는 기둥의 수를 나타내는 정수 N 하나가 있는 줄로 시작한다. 그 다음 N개의 줄이 주어진다. 이 중 i번째 줄에는 i번째 기둥의 위치를 나타내는 두 정수 Xi와 Yi가 주어진다. 각 테스트 케이스의 마지막 두 줄은 이미 만들어진 두 울타리를 나타낸다. 이 두 줄에는 각각 두 정수 Pk와 Qk가 주어지며, 이는 k번째 기존 울타리가 Pk번째 기둥과 Qk번째 기둥을 잇는다는 뜻이다(기둥은 1부터 번호가 매겨진다).

출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력한다. 여기서 x는 테스트 케이스 번호(1부터 시작)이고, y는 설계에 추가할 수 있는 울타리의 최대 개수(기존 울타리는 포함하지 않음)이다. 그 다음 y개의 줄을 출력한다. 각 줄에는 서로 다른 두 정수 i와 j(둘 다 1 이상 N 이하)가 있어야 하며, 이는 i번째 기둥과 j번째 기둥을 잇는 서로 다른 울타리 하나를 나타낸다. y+2개의 울타리(기존 울타리와 추가한 울타리 모두) 중 어떤 쌍도 끝점(기둥)에서만 만나고 그 외에는 겹치지 않아야 한다.

제한

  • 1 ≤ T ≤ 10.
  • 모든 i에 대해 −109 ≤ Xi ≤ 109.
  • 모든 i에 대해 −109 ≤ Yi ≤ 109.
  • i ≠ j인 모든 i, j에 대해 (Xi, Yi) ≠ (Xj, Yj).
  • 모든 k에 대해 1 ≤ Pk < Qk ≤ N.
  • 기존 울타리는 끝점에서만 만나고 그 외에는 교차하지 않는다.
  • 세 기둥이 한 직선 위에 있는 경우는 없다.

힌트

다음 그림은 주어진 예제의 기둥과 울타리를 나타낸다. 굵은 파란 선이 그어진 울타리가 기존 울타리이고, 나머지는 예제 출력에 나온 대로 울타리를 최대한 많이 추가한 방법을 나타낸다.

예제1

  1. 예제 1

    입력
    2
    4
    0 0
    0 1
    1 1
    1 0
    1 2
    3 4
    5
    0 0
    0 1
    1 1
    1 0
    2 3
    1 2
    3 5
    
    예상 출력
    Case #1: 3
    1 4
    2 3
    4 2
    Case #2: 6
    5 4
    2 4
    5 2
    1 4
    4 3
    3 2