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

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

유리판 자르기

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

요약
큰 판을 빈틈없이 채우는 겹치지 않는 직사각형들이 주어질 때, 각 직사각형을 분리하는 모서리 간 절단선을 X1, Y1 순으로 가장 작은 것부터 출력한다.
난이도

어려움10점 중 8점

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

문제

제프 아저씨는 창문과 액자에 쓰이는 유리판을 파는 유리 가게를 운영합니다. 알다시피 유리판은 한쪽 모서리에서 맞은편 모서리까지 직선으로 이어지는 자름선을 따라서만 자를 수 있습니다. 아래 그림은 하나의 유리판을 세 개의 더 작은 유리판으로 자르는 방법을 보여 줍니다.

제프 아저씨는 보통 다음과 같이 일합니다. 먼저 창문이나 액자에 쓸 작은 직사각형 유리판 주문을 여러 개 모읍니다. 그런 다음 큰 직사각형 유리판 하나 위에, 어떤 두 직사각형도 겹치지 않도록 각 작은 직사각형의 위치를 표시합니다. 마지막으로, 자를 조각의 한쪽 모서리에서 맞은편 모서리까지 곧게 이어지는 수평·수직 자름을 차례로 수행하여 모든 손님의 유리판을 만들어 냅니다.

이 마지막 단계(실제로 큰 유리판을 자르는 일)가 세상에서 가장 지루한 일이기 때문에, 제프 아저씨는 여러분에게 도움을 청합니다. 큰 직사각형 유리판과 표시된 각 직사각형의 왼쪽 아래·오른쪽 위 좌표가 주어졌을 때, 모서리에서 모서리까지의 자름을 어떤 순서로 수행하면 되는지 구하는 프로그램이 필요합니다. 이 자름 목록은 아저씨 대신 지루한 절단을 수행할 기계에 입력됩니다.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 창문과 액자의 개수를 나타내는 정수 NN이 주어집니다 (2≤N≤20002 \le N \le 2000). 이어지는 NN개의 줄에는 각각 네 정수 X1X_1, Y1Y_1, X2X_2, Y2Y_2가 주어지며, (X1,Y1)(X_1, Y_1)과 (X2,Y2)(X_2, Y_2)는 표시된 직사각형의 왼쪽 아래·오른쪽 위 좌표입니다 (−5000≤X1,Y1,X2,Y2≤5000-5000 \le X_1, Y_1, X_2, Y_2 \le 5000; X1<X2X_1 < X_2이고 Y1<Y2Y_1 < Y_2).

각 테스트 케이스에서 다음을 가정할 수 있습니다.

  • 표시된 직사각형들은 서로 겹치지 않으며(경계에서 맞닿을 수는 있습니다) 큰 유리판을 남는 유리 없이 완전히 채웁니다. 따라서 큰 유리판의 왼쪽 아래·오른쪽 위 좌표는 직사각형들의 좌표로부터 알아낼 수 있습니다.
  • 큰 유리판은 항상 모서리에서 모서리까지의 자름을 차례로 수행하여 표시된 직사각형들로 분리할 수 있습니다.

N=0N = 0인 줄은 입력의 끝을 의미하며 처리하지 않습니다.

출력

각 테스트 케이스에 대해, 큰 유리판을 원하는 작은 유리판들로 분리하기 위해 수행해야 하는 자름의 순서 목록을 출력합니다. 각 자름은 한 줄에 네 정수 X1X_1 Y1Y_1 X2X_2 Y2Y_2로 출력하며, 이는 자름의 두 끝점을 나타냅니다.

  • 수평 자름은 Y1=Y2Y_1 = Y_2이고 X1<X2X_1 < X_2입니다.
  • 수직 자름은 X1=X2X_1 = X_2이고 Y1<Y2Y_1 < Y_2입니다.

어떤 자름은 현재 조각의 한쪽 모서리에서 맞은편 모서리까지 곧게 이어지면서 어떤 표시된 직사각형의 내부도 가로지르지 않아 그 조각을 두 조각으로 나눌 때에만 수행할 수 있습니다. 동시에 여러 자름이 가능할 수 있습니다. 답을 유일하게 만들기 위해, 항상 가능한 자름 중 X1X_1이 가장 작은 것을 수행하고, 같으면 Y1Y_1이 가장 작은 것을 수행합니다. 한 번에 하나씩 자르고 매번 다시 판단하며, 모든 조각이 하나의 표시된 직사각형이 될 때까지 계속합니다.

서로 이웃한 테스트 케이스의 목록은 빈 줄로 구분합니다.

예제3

  1. 예제 1

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

    입력
    2
    0 0 5 10
    5 0 10 10
    0
    
    예상 출력
    5 0 5 10
    
  3. 예제 3

    입력
    2
    0 0 10 5
    0 5 10 10
    0
    
    예상 출력
    0 5 10 5