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

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

블록 분리하기

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

요약
작은 격자 위의 연결된 세 조각에 대해, 각 조각을 한 칸씩 밀어 이동시켜 세 바운딩 박스가 서로 겹치지 않게 만드는 최소 이동 횟수를 구하거나, 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
BFS, 시뮬레이션, 완전 탐색, 기하
정답자
아직 제출이 없습니다

문제

소들은 사실 퍼즐을 아주 좋아합니다! 세 개의 단단한 물체로 이루어진 기계식 퍼즐이 있습니다. 각 물체는 1×11 \times 1 단위 정사각형들을 서로 붙여 만든 것으로, 상하좌우(북·남·동·서)로 인접한 정사각형을 따라 어느 칸에서든 물체의 다른 어떤 칸으로도 이동할 수 있다는 의미에서 '연결된' 모양입니다.

물체는 북·남·동·서 중 한 방향으로 한 칸씩 반복해서 밀어 움직일 수 있습니다. 퍼즐의 목표는 세 물체를 서로 '분리'하는 것입니다. 즉, 각 물체를 감싸는 최소 직사각형(바운딩 박스)이 서로 양(+)의 넓이로 겹치지 않도록 만드는 것입니다. 세 물체의 모양과 위치가 주어질 때, 물체들을 분리하는 데 필요한 최소 이동 횟수(한 칸 밀기 1번을 1로 셈)를 구하세요.

입력

  • 첫째 줄: 공백으로 구분된 세 정수 N1N_1, N2N_2, N3N_3. 각각 물체 1, 2, 3을 이루는 단위 정사각형의 개수입니다.
  • 다음 N1N_1개의 줄: 물체 1을 이루는 각 정사각형의 남서쪽(왼쪽 아래) 꼭짓점 좌표 (x,y)(x, y).
  • 다음 N2N_2개의 줄: 물체 2를 이루는 각 정사각형의 남서쪽 꼭짓점 좌표.
  • 다음 N3N_3개의 줄: 물체 3을 이루는 각 정사각형의 남서쪽 꼭짓점 좌표.

모든 좌표는 00 이상 99 이하입니다.

출력

  • 첫째 줄: 세 물체를 분리하기 위해 필요한 최소 이동 횟수. 어떤 방법으로도 분리할 수 없으면 −1-1을 출력합니다.

힌트

예를 들어 물체 1이 1212개, 물체 2가 33개, 물체 3이 55개의 정사각형으로 이루어진 경우를 생각해 봅시다. 물체 3을 동쪽으로 한 칸, 물체 2를 북쪽으로 한 칸, 물체 1을 서쪽으로 세 칸 밀면 세 물체의 바운딩 박스가 더 이상 겹치지 않게 되어, 총 55번의 이동으로 분리할 수 있습니다.

예제1

  1. 예제 1

    입력
    12 3 5
    0 0
    1 0
    2 0
    3 0
    3 1
    0 1
    0 2
    0 3
    0 4
    1 4
    2 4
    3 4
    2 1
    2 2
    1 2
    2 3
    3 3
    4 3
    4 4
    4 2
    
    예상 출력
    5