프레임

시간 제한3초메모리 제한256 MB

요약
두 개의 사각 테두리(외곽 사각형에서 내부 사각형을 뺀 모양)가 주어질 때, 두 번째 테두리를 평행이동하여 첫 번째 테두리와의 교차 면적을 최대화하는 값을 구합니다.
난이도

어려움10점 중 8점

유형
기하, 수학, 완전 탐색
정답자
아직 제출이 없습니다

문제

바샤와 페탸가 재미있는 게임을 한다. 규칙은 간단하다. 두 개의 프레임이 주어지고, 두 번째 프레임을 평행이동시켜 두 프레임이 겹치는 영역의 넓이가 최대가 되도록 만들어야 한다. 두 사람은 각자 두 번째 프레임의 평행이동 벡터를 하나 적어내고, 더 큰 교집합 넓이를 만든 사람이 이긴다.

바샤는 최적의 평행이동 벡터를 찾아 주는 프로그램을 만들어서 이기고 싶어한다.

이 게임에서 프레임이란 두 직사각형의 차집합이다. 즉, 바깥 직사각형에서 그 안에 완전히 들어 있는 안쪽 직사각형을 뺀 영역이다. 안쪽 직사각형은 바깥 직사각형의 내부에 완전히(경계에 닿지 않게) 놓여 있으며, 두 직사각형의 변은 모두 좌표축에 평행하다.

정의를 더 분명히 하기 위해 몇 가지 예를 살펴보자.

잘못된 프레임올바른 프레임프레임의 교집합

프레임의 넓이는 (W⋅H−w⋅h)(W \cdot H - w \cdot h) 이다. 여기서 W,HW, H 는 바깥 직사각형의 가로·세로 길이이고, w,hw, h 는 안쪽 직사각형의 가로·세로 길이이다 (0<w<W0 < w < W, 0<h<H0 < h < H).

두 번째 프레임을 적절히 평행이동시켰을 때 두 프레임의 교집합 넓이가 가질 수 있는 최댓값을 구하는 프로그램을 작성하라.

입력

각 프레임은 네 개의 점으로 주어진다. 먼저 바깥 직사각형의 마주 보는 두 꼭짓점이 주어지고, 이어서 안쪽 직사각형의 마주 보는 두 꼭짓점이 주어진다. 각 점은 정수 좌표 xx, yy 의 쌍으로 표현된다. 모든 좌표의 절댓값은 10810^8 을 넘지 않는다.

첫째 줄에는 첫 번째 프레임의 정보가, 둘째 줄에는 두 번째 프레임의 정보가 주어진다.

출력

두 번째 프레임을 평행이동시켜 얻을 수 있는 두 프레임 교집합 넓이의 최댓값을 정수 하나로 출력한다.

예제3

  1. 예제 1

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

    입력
    0 0 10 10 4 4 6 6
    0 0 10 10 4 4 6 6
    
    예상 출력
    96
    
  3. 예제 3

    입력
    0 0 20 20 9 9 11 11
    0 0 6 6 2 2 4 4
    
    예상 출력
    32