삼각형 조각 맞추기

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

요약
n개의 삼각형 구멍과 각 구멍을 꼭짓점에서 대변으로 자른 2n개의 조각이 주어질 때, 변의 길이와 각도를 이용해 각 구멍을 채우는 두 조각을 찾는다.
난이도

보통10점 중 7점

유형
기하, 해시맵, 정렬, 구현
정답자
아직 제출이 없습니다

문제

토미는 종이에서 삼각형 모양의 구멍을 여러 개 오려냈다. 각 종이에는 삼각형 구멍이 하나씩 생겼다. 그런 다음 토미는 오려낸 각 삼각형을, 한 꼭짓점에서 시작하는 단 한 번의 직선 절단으로 두 개의 삼각형으로 나누었다. 즉, 원래의 삼각형마다 그 세 꼭짓점 중 하나에서 맞은편 변 위의 한 점까지 곧게 잘라 두 조각으로 만든 것이다.

그런데 이 삼각형 조각들이 마구 뒤섞여 흩어져 버렸다. 각 삼각형 구멍을 어떤 두 조각으로 채울 수 있는지, 즉 어떤 조각들이 어느 구멍에 들어가는지를 알아내는 프로그램을 작성하여라.

입력

각 테스트 케이스는 오려낸 구멍의 개수를 나타내는 정수 n≤20n \le 20으로 시작한다. 이어서 각 구멍의 좌표가 한 줄에 하나씩 주어지며, 이 구멍들은 1,2,…,n1, 2, \dots, n으로 번호가 매겨져 있다고 가정한다. 그 다음에는 이분할로 생긴 2n2n개의 삼각형 조각의 좌표가 한 줄에 하나씩 주어진다. 이 조각들은 1,2,…,2n1, 2, \dots, 2n으로 번호가 매겨져 있으며, 특별한 순서 없이 나열된다.

각 구멍 또는 조각의 좌표는 x1 y1 x2 y2 x3 y3x_1\ y_1\ x_2\ y_2\ x_3\ y_3 형태로 주어진다. 각 xix_i와 yiy_i는 소수점 아래 셋째 자리까지 반올림된 값이고, ∣xi∣,∣yi∣≤200|x_i|, |y_i| \le 200이다. 어떤 두 구멍도 서로 합동이 아니며, 어떤 두 조각도 서로 합동이 아니다. n=0n = 0이면 입력이 끝난다.

출력

각 테스트 케이스에 대해, 먼저 케이스 번호를 출력하고 이어서 nn개의 줄을 다음과 같이 출력한다.

Hole 1: t1a, t1b
Hole 2: t2a, t2b
...
Hole n: tna, tnb

여기서 t1a,t1bt1a, t1b는 구멍 1을 채우는 두 조각의 번호이고, t2a,t2bt2a, t2b는 구멍 2를 채우는 두 조각의 번호이며, 나머지도 마찬가지이다. 각 줄에서는 두 번호 중 작은 것을 먼저 출력한다. 조각을 구멍에 맞출 때 뒤집어서는 안 된다(회전과 평행 이동만 허용된다). 각 테스트 케이스의 정답은 유일하다. 테스트 케이스 사이의 출력은 빈 줄로 구분한다.

참고: 조각을 처리하며 길이, 각도, 또는 삼각함수 값이 같은지 비교할 때, 두 값의 차이가 0.010.01 미만이면 같은 것으로 간주해도 된다.

예제1

  1. 예제 1

    입력
    1
    18.691 6.103 21.668 13.709 21.332 25.894
    59.388 30.873 55.299 36.186 61.45 22.97
    67.828 85.496 60.751 72.752 59.2 67.49
    3
    18.73 4.012 6.662 7.557 14.035 7.478
    14.869 32.398 32.341 31.772 7.522 29.674
    25.272 6.868 4.572 2.014 10.487 16.121
    26.135 53.073 44.18 50.723 40.31 42.91
    86.601 29.95 70.542 17.088 66.77 14.88
    90.344 89.528 92.179 88.665 87.99 82.54
    39.327 62.11 35.033 57.127 18.14 63.89
    37.13 80.202 36.308 75.111 34.28 75.11
    14.043 68.482 15.22 55.423 10.42 75.43
    0
    
    예상 출력
    Case 1:
    Hole 1: 1, 2
    
    Case 2:
    Hole 1: 3, 5
    Hole 2: 2, 6
    Hole 3: 1, 4