자물쇠 장인

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

요약
면적이 겹치지 않게 맞물린 최대 세 개의 축 정렬 다각형 조각이 주어질 때, 조각들을 겹치지 않게 평행 이동시켜 직선 하나로 목표 조각과 나머지를 나눌 수 있는 조각의 개수를 센다.
난이도

어려움10점 중 8점

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

문제

평평한 조각을 맞물려 만든 자물쇠가 있다. 조각은 모두 축에 평행한 다각형이고, 변은 가로 아니면 세로다. 자물쇠를 여는 방법은 문 표면 위에서 조각을 밀어 서로 떼어내는 것뿐이다.

한 번에 조각 하나를 골라 원하는 방향으로 밀 수 있다. 미는 동안 그 조각이 다른 조각과 넓이가 양수인 영역을 함께 차지하면 안 된다. 경계끼리 닿는 것은 겹치는 것이 아니므로 허용한다. 조각을 회전할 수는 없다.

여러 번 미는 과정을 거쳐 어떤 조각과 나머지 조각 전체 사이에 직선 하나를 그을 수 있는 배치에 도달할 수 있으면, 그 조각은 분리 가능하다. 직선을 그을 수 있다는 것은 그 조각이 직선의 한쪽에 있고 나머지 조각이 모두 반대쪽에 있다는 뜻이다. 미는 조각을 하나로 제한하지는 않는다. 다른 조각을 먼저 치워 길을 낸 다음 목표 조각을 빼내도 된다.

자물쇠 배치가 주어지면 분리 가능한 조각의 개수를 구하라. 조각마다 주어진 배치에서 시작해 따로 판정한다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 자물쇠를 이루는 조각의 개수 NN이 주어진다. 이어지는 NN개의 줄에는 조각 하나가 다음 형식으로 주어진다.

c x1 y1 ... xc yc

cc는 조각의 꼭짓점 개수이고, (xi,yi)(x_i, y_i)는 꼭짓점의 좌표를 시계 방향으로 나열한 것이다. 각 조각의 변은 모두 가로 또는 세로이고, 두 방향이 번갈아 나온다. 두 조각이 넓이가 양수인 영역을 함께 차지하는 일은 없다. 한 테스트 케이스의 조각은 2개 또는 3개이고, 한 테스트 케이스에 나오는 꼭짓점은 모두 합쳐 30개 이하다. 좌표는 모두 0 이상 1000 이하의 정수다.

조각이 0개인 테스트 케이스가 입력의 끝을 알리며, 이 케이스는 처리하지 않는다.

출력

각 테스트 케이스마다 분리 가능한 조각의 개수를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    2
    12 0 0 0 6 9 6 9 0 6 0 6 1 8 1 8 5 1 5 1 1 3 1 3 0
    4 2 2 2 4 7 4 7 2
    2
    12 0 0 0 6 9 6 9 0 6 0 6 1 8 1 8 5 1 5 1 1 3 1 3 0
    4 4 2 4 4 7 4 7 2
    0
    
    예상 출력
    0
    2
    
  2. 예제 2

    입력
    2
    4 0 0 0 2 2 2 2 0
    4 5 5 5 7 9 7 9 5
    2
    4 0 0 0 2 2 2 2 0
    4 2 0 2 2 4 2 4 0
    2
    4 0 0 0 1 10 1 10 0
    4 0 1 0 2 10 2 10 1
    0
    
    예상 출력
    2
    2
    2