스네이크 게임

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

요약
화살표와 사과가 있는 격자에서 정해진 규칙으로 움직이는 스네이크 게임의 최대 점수를 구한다.
난이도

어려움10점 중 8점

유형
시뮬레이션, 그리디, 그래프, 구현
정답자
아직 제출이 없습니다

문제

숏켁은 명랑하제 (KAIST 게임개발 동아리 하제에서 매년 진행하는 신입생 게임 개발 행사) 에 참가해 자동화된 스네이크 게임을 만들었다. 이 게임의 목표는 스네이크를 길게 만들어 게임의 점수를 높이는 것이다. 스네이크 게임의 맵은 다음과 같은 HH행 WW열의 크기의 직사각형 타일들로 이루어져 있다.

  1. 모든 타일에는 위, 오른쪽, 아래, 왼쪽 화살표 중 하나가 적혀있다.
  2. 어떤 타일에는 사과가 올라가있다.

이 맵에는 스네이크가 한 마리 있다. 스네이크는 머리, 몸통, 꼬리로 구성되어 있다. 스네이크가 차지하는 모든 타일 중, 가장 마지막에 차지한 타일이 머리, 가장 처음 차지한 타일이 꼬리이며, 나머지 타일들이 몸통이다. 처음에 스네이크는 22개의 인접한 타일을 차지하고 있으며, 그중 하나는 머리, 하나는 꼬리이다. 스네이크 게임을 시작하면 점수는 스네이크가 차지하는 타일 수로 시작하며, 스네이크는 다음과 같은 순서대로 행동하는 것을 반복한다.

  1. 스네이크의 머리가 자라날 위치를 정한다. 스네이크의 새 머리는 현재 머리 타일에서 그 타일에 적힌 화살표 방향으로 11칸 인접한 자리로 정해진다.

    • 단, 타일에 적힌 화살표가 스네이크가 원래 움직이는 방향의 정 반대 방향이라면, 타일에 적힌 화살표를 무시하고 원래 움직이던 방향으로 11칸 인접한 자리로 정해진다.
    • 처음 상태의 스네이크가 움직이던 방향은 꼬리에서 머리 방향으로 정의한다.
  2. 스네이크의 머리가 자라날 위치에 사과가 없거나, 자라날 위치가 맵 바깥이라면 꼬리 타일에서 스네이크가 빠져나와 더 이상 차지하지 않게 된다. 정의에 따라, 나머지 타일 중 가장 처음 차지한 타일이 새로운 꼬리가 된다.

  3. 스네이크의 머리가 자라날 위치에 사과가 있다면 사과를 먹어치운다. 한번 먹은 사과는 사라진다.

  4. 스네이크의 머리가 자라날 위치에 스네이크가 새롭게 머리 타일을 차지한다. 이 위치가 맵 바깥이거나, 이미 스네이크가 차지하고 있는 타일이면 게임을 즉시 종료한다.

  5. 게임의 점수를 스네이크가 차지하고 있는 타일의 총 개수로 바꾼다.

숏켁은 이 게임에서 나오는 최대 점수를 알고 싶어했다. 아트를 그리느라 바쁜 숏켁을 위해 구해주자.

입력

첫 번째 줄에 H,W,r_1,c_1,r_2,c_2H, W, r\_1, c\_1, r\_2, c\_2가 공백으로 구분되어 주어진다. 이는 맵의 세로 길이가 HH, 가로 길이가 WW이며, 뱀의 시작 머리 위치가 (r_1,c_1)(r\_1, c\_1), 뱀의 시작 꼬리 위치가 (r_2,c_2)(r\_2, c\_2) 임을 의미한다. 여기서 맵의 왼쪽 위 타일 좌표는 (1,1)(1, 1)이며, rr행 cc열의 타일 좌표는 (r,c)(r, c)이다. (3≤H,W≤500;(3 \le H, W \le 500; 1≤r_1,r_2≤H;1 \le r\_1, r\_2 \le H; 1≤c_1,c_2≤W;1 \le c\_1, c\_2 \le W; ∣r_1−r_2∣+∣c_1−c_2∣=1)\lvert r\_1-r\_2 \rvert + \lvert c\_1-c\_2 \rvert = 1)

다음 HH개의 줄에는 공백으로 구분된 WW개의 00 이상 33 이하의 정수가 주어진다. rr번째 줄의 cc번째 수는 (r,c)(r, c)에 적힌 화살표에 대한 정보이며, 위, 오른쪽, 아래, 왼쪽 화살표가 각각 0,1,2,30, 1, 2, 3으로 주어진다.

다음 줄에는 사과의 개수 AA가 주어진다. (1≤A≤H×W−2)(1 \le A \le H \times W - 2)

다음 AA개의 줄의 ii번째 줄에는 두 정수 p_i,q_ip\_i, q\_i가 공백으로 구분되어 주어진다. 이는 ii번째 사과의 위치가 (p_i,q_i)(p\_i, q\_i)라는 것을 의미한다. 한 타일에 두 개 이상의 사과가 있거나, 최초에 스네이크가 있는 타일에 사과가 있는 경우는 주어지지 않는다. (1≤p_i≤H;(1 \le p\_i \le H; 1≤q_i≤W)1 \le q\_i \le W)

출력

게임에서 나오는 최대 점수를 출력한다.

힌트

맵에 따라 게임이 끝나지 않을 수 있음에 유의하라.

예제3

  1. 예제 1

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

    입력
    3 4 2 4 3 4
    1 1 1 2
    0 2 3 2
    0 3 0 3
    4
    1 4
    2 2
    2 3
    3 3
    
    예상 출력
    3
    
  3. 예제 3

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