만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

각의 볼록 껍질

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

요약
각 각도를 꼭짓점과 두 반직선 위의 점으로 주어질 때, 모든 각도 위 점들의 볼록 껍질 경계를 선분, 반직선, 직선으로 출력합니다.
난이도

보통10점 중 7점

유형
기하, 정렬
정답자
아직 제출이 없습니다

문제

평면 위의 점 집합이 볼록하다는 것은, 그 집합에 속한 임의의 두 점을 잇는 선분도 집합에 포함된다는 뜻입니다. 집합 X의 볼록 껍질은 X를 포함하는 볼록 집합 가운데 포함 관계에서 가장 작은 집합입니다. 이 문제에서는 주어진 각들에 속한 점들의 볼록 껍질을 구합니다. 각은 같은 점에서 출발하는 두 반직선으로 이루어진 도형이며, 그 점을 각의 꼭짓점이라고 합니다. 왼쪽 그림에는 두 각이 있고, 오른쪽 그림에는 그 두 각의 볼록 껍질이 있습니다.

입력

첫 줄에 각의 개수 nn (1≤n≤10001 \le n \le 1000)이 주어집니다. 이어지는 nn개의 줄에는 각마다 세 점이 주어집니다. 꼭짓점 하나와, 두 반직선 위에 각각 있는 꼭짓점이 아닌 점 하나씩입니다. 모든 좌표는 정수이며 절댓값은 10410^4을 넘지 않습니다. 각의 크기는 0도보다 크고 180도보다 작습니다.

출력

볼록 껍질의 경계를 반직선, 직선, 선분을 이어 붙인 목록으로 출력합니다. 출력에 있는 두 객체는 같은 직선 위에 놓일 수 없습니다. 모든 선분의 길이는 0보다 커야 합니다. 각 객체의 시작점은 바로 앞 객체의 끝점과 같아야 합니다. 출력한 순서대로 경계를 따라 이동할 때 각들의 볼록 껍질이 오른쪽에 있어야 합니다. 출력하는 모든 수는 절댓값이 10510^5 이하인 정수입니다.

첫 줄에 객체의 개수 ll을 출력합니다. 이어지는 ll개의 줄에는 다음 형식으로 객체를 설명합니다. segment x1 y1 x2 y2는 (x1,y1)(x_1, y_1)에서 (x2,y2)(x_2, y_2)로 향하는 선분입니다. outray x1 y1 x2 y2는 (x1,y1)(x_1, y_1)에서 시작해 (x2,y2)(x_2, y_2)를 지나는 반직선입니다. inray x1 y1 x2 y2는 (x2,y2)(x_2, y_2)에서 시작해 (x1,y1)(x_1, y_1)을 지나는 반직선입니다. line x1 y1 x2 y2는 두 점을 지나는 직선으로, 직선의 방향으로 나아갈 때 (x1,y1)(x_1, y_1)이 (x2,y2)(x_2, y_2)보다 먼저 옵니다.

볼록 껍질이 평면 전체이면 l=0l = 0을 출력합니다.

예제3

  1. 예제 1

    입력
    2
    3 1 4 1 4 4
    2 2 4 3 3 4
    
    예상 출력
    3
    inray 4 1 3 1
    segment 3 1 2 2
    outray 2 2 3 5
    
  2. 예제 2

    입력
    2
    0 0 1 0 0 1
    0 0 -1 0 0 1
    
    예상 출력
    1
    line 1 0 -1 0
    
  3. 예제 3

    입력
    2
    0 0 1 0 0 1
    0 0 -1 0 0 -1
    
    예상 출력
    0