QOJ.ac

QOJ

Límite de tiempo: 0.5 s Límite de memoria: 1024 MB Puntuación total: 100

#15469. 마법의 문

Estadísticas

보물 동굴로 향하는 마법의 문은 다양한 보석으로 채워진 $m\times n$ 격자입니다. 보석은 세 종류로 나뉩니다. 여러 색과 모양의 일반 보석, 그리고 두 특수 종류인 폭탄 보석과 비브라늄 보석입니다.

problem_15469_b9b73e6bad8d1df16c283e61ebf3041d.png

3개 이상 일치 그룹은 동일한 일반 보석 3개 이상이 가로나 세로 방향으로 연속해서 정렬된 그룹입니다. 하나의 보석은 가로 그룹과 세로 그룹의 교차점에서 두 그룹에 모두 속할 수 있습니다. 폭탄 보석은 이런 그룹을 만들지 않습니다. 비브라늄 보석도 마찬가지입니다.

격자의 초기 상태에는 3개 이상 일치 그룹이 없습니다. 처음에 손으로 일반 보석 두 개를 만지면 두 보석의 위치가 서로 바뀝니다. 이 한 번의 교환으로 연쇄 반응이 시작되어 특정 규칙에 따라 격자의 보석이 사라집니다.

최초 교환 이후에는 격자에 더 이상 변화가 없을 때까지 다음 과정을 반복합니다.

단계 1: 3개 이상 일치 그룹의 연쇄 반응

  1. 모든 3개 이상 일치 그룹에 속하는 보석이 동시에 사라집니다.

  2. 사라진 보석 위에 있는 모든 종류의 보석은 중력에 의해 아래로 떨어져 빈칸을 채웁니다. 이때 한 칸 이상 내려간 폭탄 보석은 활성화됩니다.

  3. 보석이 떨어진 후 새로 3개 이상 일치 그룹이 생기면 이 단계의 첫 번째 세부 단계부터 반복합니다.

  4. 더 이상 3개 이상 일치 그룹이 생기지 않으면 단계 2로 진행합니다.

단계 2: 활성화된 폭탄의 폭발

  1. 현재 활성화 상태인 모든 폭탄이 동시에 폭발합니다.

  2. 각 폭발하는 폭탄은 가로와 세로 방향으로 광선을 발사합니다.

  3. 광선은 폭탄의 위치에서 격자 가장자리까지 나아갑니다.

  4. 광선이 비브라늄 보석에 닿으면 그 경로가 막힙니다.

  5. 광선 경로에 있는 모든 일반 보석과 폭탄은 폭발한 폭탄과 함께 사라집니다.

  6. 광선에 맞은, 아직 폭발하지 않은 폭탄은 폭발하지 않고 그냥 사라집니다.

  7. 사라진 보석 위의 보석이 중력으로 아래로 떨어져 새로 생긴 빈칸을 채웁니다. 이때 한 칸 이상 내려간 폭탄은 활성화됩니다. 이후 단계 1을 반복합니다.

단계 1과 단계 2로 인한 변화가 더 이상 없으면 전체 과정이 끝납니다. 폭탄 보석과 비브라늄 보석은 최초 교환의 대상으로 선택되지 않으며, 3개 이상 일치 그룹을 만들지 않습니다. 또한 비브라늄 보석은 절대 사라지지 않고 폭탄 광선을 막는 장벽 역할을 합니다. 하지만 중력의 영향을 받아 아래 빈칸으로 떨어집니다.

예를 들어 그림 1과 같은 $6\times4$ 격자의 마법의 문을 생각해 봅시다. 그림에서 $0$은 폭탄 보석, $-1$은 비브라늄 보석, 양수는 일반 보석을 나타냅니다. 그림 (a)의 초기 상태에서 $(6,1)$과 $(5,4)$의 두 보석을 교환하면 (b)의 상태가 됩니다. 위치 $(r,c)$는 위에서 $r$번째 행, 왼쪽에서 $c$번째 열의 칸을 나타냅니다. 좌표는 1부터 시작합니다. 이 상태에는 $2$ 세 개로 이루어진 3개 이상 일치 그룹이 있습니다. 단계 1에 따라 이 그룹의 보석이 사라지면 (c)의 상태가 됩니다. 이때 $(4,3)$의 폭탄 보석이 활성화되고 $1$ 세 개로 이루어진 새 그룹이 생깁니다. 다시 단계 1에서 $1$ 보석 세 개가 제거되어 (d)의 상태가 됩니다. 더 이상 일치 그룹이 없으므로 단계 2에서 폭탄이 폭발해 (e)의 상태가 됩니다. 여기서는 $1$ 세 개와 $3$ 네 개로 이루어진 두 그룹이 생깁니다. 단계 1에 따라 이 보석이 사라지면 (f)의 상태가 됩니다. 이 상태에서는 더 이상 변화가 없으므로 최종 상태입니다. 이 과정에서 총 18개의 보석이 사라집니다.

problem_15469_ff3006d93a9d0c7094f27b98426f2e1d.png

그림 1. 연쇄 반응

특정 개수의 보석이 사라지면 마법의 문이 열립니다. 여러분의 임무는 마법의 문 정보와 교환할 두 일반 보석의 위치가 주어졌을 때, 한 번의 교환으로 시작된 전체 연쇄 반응이 완전히 멈춘 후 사라진 보석 수를 계산하는 프로그램을 작성하는 것입니다.

입력

프로그램은 표준 입력에서 읽어야 합니다. 첫 줄에는 격자의 행 수와 열 수를 나타내는 두 정수 $m,n$ ($3\le m\le80$; $3\le n\le80$)이 주어집니다. 다음 $m$개 줄에는 각각 $n$개의 정수가 주어지며 각 행의 보석을 나타냅니다. $0$은 폭탄 보석, $-1$은 비브라늄 보석, $1$ 이상 $9$ 이하인 정수는 일반 보석입니다. 마지막 줄에는 네 정수 $r_1,c_1,r_2,c_2$ ($1\le r_1,r_2\le m$; $1\le c_1,c_2\le n$)가 주어집니다. $(r_1,c_1)$과 $(r_2,c_2)$는 교환할 서로 다른 두 일반 보석의 좌표입니다. 좌표는 1부터 시작합니다.

출력

프로그램은 표준 출력에 써야 합니다. 정확히 한 줄을 출력하세요. 그 줄에는 모든 과정이 끝난 후 사라질 보석의 총개수를 나타내는 정수 하나가 있어야 합니다.

다음은 두 테스트 케이스의 예제 입력과 출력입니다. (예제 입력 1은 그림 1(a)에 해당합니다.)

예제

입력 1

6 4
1 1 2 2
3 2 -1 1
3 1 0 2
1 1 3 1
3 2 2 3
2 1 2 1
6 1 5 4

출력 1

18

입력 2

4 5
0 2 1 2 2
0 1 2 2 0
1 1 2 1 0
2 -1 -1 -1 2
3 3 3 4

출력 2

15

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.