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

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

직사각형이 나눈 영역의 개수

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

요약
최대 50개 직사각형 테두리가 평면을 나누는 영역 개수를 바깥 영역까지 포함해서 셉니다.
난이도

보통10점 중 6점

유형
기하, 그래프, BFS
정답자
아직 제출이 없습니다

문제

x-y 평면에 직사각형 여러 개가 놓여 있다. 각 직사각형의 네 변은 x축 또는 y축과 평행하고, 모든 직사각형은 입력에서 정한 좌표 범위 안에 있다. 좌표에 다른 제약은 없다.

직사각형의 변은 평면을 여러 영역으로 나눈다. 한 영역의 경계가 직사각형 한 개의 변으로만 이루어질 수도 있고, 여러 직사각형의 변이 섞여 있을 수도 있다. 힌트의 그림 1에서는 직사각형 세 개가 서로 겹쳐서 평면이 여덟 개 영역으로 나뉜다.

직사각형은 더 복잡하게 겹칠 수도 있다. 두 직사각형이 변의 일부만 공유하거나, 꼭짓점 하나에서만 맞닿거나, 한쪽이 다른 쪽 안에 완전히 들어갈 수도 있다. 그림 2가 그런 경우를 보여 준다.

직사각형의 변이 평면을 몇 개 영역으로 나누는지 세는 프로그램을 작성하시오.

입력

입력은 데이터 세트 여러 개로 이루어진다. 각 데이터 세트의 형식은 다음과 같다.

n
l1 t1 r1 b1
l2 t2 r2 b2
...
ln tn rn bn

데이터 세트의 첫째 줄에 평면에 놓인 직사각형의 개수 nn이 주어진다. (1≤n≤501 \le n \le 50)

이어지는 nn개 줄에 직사각형이 한 줄에 하나씩 주어진다. 각 줄에는 정수 네 개 lil_i, tit_i, rir_i, bib_i가 공백 하나로 구분되어 주어진다. (li,ti)(l_i, t_i)는 ii번째 직사각형의 왼쪽 위 꼭짓점의 x-y 좌표이고, (ri,bi)(r_i, b_i)는 오른쪽 아래 꼭짓점의 좌표다. (0≤li<ri≤1060 \le l_i < r_i \le 10^6, 0≤bi<ti≤1060 \le b_i < t_i \le 10^6)

입력의 마지막 줄에는 0 하나만 주어진다.

출력

각 데이터 세트마다 직사각형의 변이 평면을 나눈 영역의 개수를 한 줄에 출력한다. 평면 전체를 세므로, 모든 직사각형의 바깥에 있는 무한히 넓은 영역도 영역 하나로 센다.

힌트

그림 1. 직사각형 세 개가 평면을 여덟 개 영역으로 나눈다. 예제의 첫 번째 데이터 세트에 해당한다. x축과 y축은 설명을 위해 그린 것이므로 평면을 나누지 않는다.

그림 2. 더 복잡하게 겹친 직사각형. 예제의 두 번째 데이터 세트에 해당한다.

예제1

  1. 예제 1

    입력
    3
    4 28 27 11
    15 20 42 5
    11 24 33 14
    5
    4 28 27 11
    12 11 34 2
    7 26 14 16
    14 16 19 12
    17 28 27 21
    2
    300000 1000000 600000 0
    0 600000 1000000 300000
    0
    
    예상 출력
    8
    6
    6