정사각형 세기

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

요약
여러 직사각형 방들이 변을 공유할 때 가운데에 난 문으로 이어지며, 방들의 합집합 안에 놓이는 모든 정사각형의 개수를 센다.
난이도

어려움10점 중 8점

유형
기하, 구현, 누적 합, 완전 탐색
정답자
아직 제출이 없습니다

문제

박물관의 각 방 바닥은 단위 정사각형 타일들이 격자 모양으로 깔려 있다. 하나하나의 1×11 \times 1 타일뿐 아니라 더 큰 정사각형도 만들 수 있다. 타일들로 이루어진 임의의 k×kk \times k 블록(2×22 \times 2, 3×33 \times 3 등)도 정사각형이며, 이러한 정사각형은 모두 개수에 더해야 한다. 정사각형은 두 방에 걸쳐 있을 수도 있는데, 이때는 두 방 사이의 통로를 지나 한 방에서 이웃한 방으로 넘어간다.

예를 들어, 아래 첫 번째 예제의 두 방에는 정사각형이 모두 86개 들어 있다: 1×11 \times 1 크기 45개, 2×22 \times 2 크기 28개, 3×33 \times 3 크기 13개. (두 방 사이의 통로 폭은 3칸뿐이다.)

박물관의 방들이 주어질 때, 모든 정사각형의 개수를 세어라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 그 케이스의 방의 수를 나타내는 양의 정수 n≤1000n \le 1000이 주어진다. 이어지는 nn개의 줄은 각각 방 하나를 나타낸다. 모든 방은 직사각형이며 다음과 같이 주어진다.

x1 y1 x2 y2

여기서 (x1,y1)(x_1, y_1)과 (x2,y2)(x_2, y_2)는 서로 마주 보는 두 꼭짓점의 정수 좌표이다. 어떤 두 방도 서로 겹치지 않지만, 한 변을 공유할 수는 있다. 공유하는 변의 길이가 m>2m > 2이면, 두 방 사이에는 그 공유 변의 가운데에 길이 m−2m - 2짜리 통로가 있으며, 정사각형은 오직 이러한 통로를 통해서만 한 방에서 다른 방으로 넘어갈 수 있다. 어떤 크기의 정사각형도 두 개보다 많은 방에 걸치지 않는다. 모든 xx, yy 좌표는 1,000,000 이하이다. n=0n = 0인 줄은 입력의 끝을 나타내며 처리하지 않는다.

출력

각 테스트 케이스마다 Case i: t 형식으로 한 줄을 출력한다. 여기서 ii는 테스트 케이스 번호(1부터 시작)이고 tt는 정사각형의 총 개수이다. 모든 답은 32비트 정수 범위 안에 들어간다.

예제1

  1. 예제 1

    입력
    2
    0 0 9 3
    10 6 4 3
    3
    11 20 15 24
    11 17 15 20
    15 16 20 24
    0
    
    예상 출력
    Case 1: 86
    Case 2: 152