QOJ.ac

QOJ

Time Limit: 0.5 s Memory Limit: 1024 MB Total points: 100

#15469. Magiczne drzwi

Statistics

Magiczne drzwi do jaskini skarbów to siatka $m\times n$ wypełniona różnymi klejnotami. Klejnoty dzielą się na trzy kategorie: zwykłe klejnoty różnych kolorów i kształtów oraz dwa specjalne rodzaje — klejnoty-bomby i klejnoty z vibranium.

problem_15469_b9b73e6bad8d1df16c283e61ebf3041d.png

Grupa co najmniej trzech pasujących klejnotów to trzy lub więcej identycznych zwykłych klejnotów ułożonych kolejno pionowo albo poziomo. Jeden klejnot może należeć jednocześnie do grupy poziomej i pionowej w ich punkcie przecięcia. Klejnoty-bomby nie tworzą takich grup. Klejnoty z vibranium także ich nie tworzą.

Początkowo w siatce nie ma grup pasujących klejnotów. Gdy po raz pierwszy dotkniesz ręką dwóch zwykłych klejnotów, zamienią się miejscami. Ta jedna zamiana wywołuje reakcję łańcuchową, podczas której klejnoty znikają z siatki zgodnie z określonymi zasadami.

Po początkowej zamianie następujący proces powtarza się, aż w siatce nie zachodzą już żadne zmiany:

Etap 1: Reakcje łańcuchowe grup pasujących klejnotów

  1. Wszystkie klejnoty należące do dowolnej grupy pasujących klejnotów znikają jednocześnie.

  2. Klejnoty wszystkich rodzajów znajdujące się nad znikniętymi klejnotami spadają w dół pod wpływem grawitacji, wypełniając puste pola. Każdy klejnot-bomba, który przesunie się w dół o co najmniej jedno pole, zostaje aktywowany.

  3. Jeśli po opadnięciu klejnotów powstaną nowe grupy pasujących klejnotów, etap jest powtarzany od pierwszego kroku.

  4. Jeśli nie powstaną kolejne grupy, przejdź do etapu 2.

Etap 2: Detonacja aktywowanych bomb

  1. Wszystkie aktualnie aktywowane bomby wybuchają jednocześnie.

  2. Każda wybuchająca bomba emituje promienie w kierunkach poziomych i pionowych.

  3. Promienie biegną od położenia bomby do brzegu siatki.

  4. Droga promienia zostaje zablokowana, jeśli trafi on w klejnot z vibranium.

  5. Wszystkie zwykłe klejnoty i bomby na drodze promienia znikają wraz z wybuchającą bombą.

  6. Niewybuchłe bomby trafione promieniem po prostu znikają, nie wybuchając.

  7. Klejnoty nad znikniętymi klejnotami spadają pod wpływem grawitacji, wypełniając nowe puste pola. Każda bomba, która przesunie się w dół o co najmniej jedno pole, zostaje aktywowana. Następnie powtarza się etap 1.

Gdy etapy 1 i 2 nie powodują już zmian, cały proces się kończy. Klejnoty-bomby i klejnoty z vibranium nie są wybierane do początkowej zamiany i nie tworzą grup pasujących klejnotów. Klejnot z vibranium nigdy nie znika i stanowi barierę blokującą promienie bomb, lecz podlega grawitacji i spada do pustych pól pod nim.

Na przykład rozważ magiczne drzwi z siatką $6\times4$, jak na rysunku 1. Liczba $0$ oznacza klejnot-bombę, $-1$ klejnot z vibranium, a liczby dodatnie zwykłe klejnoty. Zaczynając od stanu (a), zamiana klejnotów w $(6,1)$ i $(5,4)$ daje stan (b). Położenie $(r,c)$ oznacza pole w $r$-tym wierszu od góry i $c$-tej kolumnie od lewej. Współrzędne są numerowane od 1. W tym stanie istnieje grupa trzech klejnotów $2$. Zgodnie z etapem 1 ich zniknięcie prowadzi do stanu (c). Wtedy bomba w $(4,3)$ zostaje aktywowana i powstaje nowa grupa trzech klejnotów $1$. Etap 1 ponownie usuwa trzy klejnoty $1$, dając stan (d). Ponieważ nie ma już grup pasujących klejnotów, bomba wybucha w etapie 2, dając stan (e). Powstają wtedy dwie grupy: trzech klejnotów $1$ i czterech klejnotów $3$. Gdy znikną w etapie 1, osiągany jest stan (f). Nie zachodzą już dalsze zmiany, więc jest to stan końcowy. Łącznie znika 18 klejnotów.

problem_15469_ff3006d93a9d0c7094f27b98426f2e1d.png

Rysunek 1. Reakcje łańcuchowe

Magiczne drzwi otwierają się, gdy zniknie określona liczba klejnotów. Napisz program, który na podstawie informacji o drzwiach i położeniach dwóch zwykłych klejnotów do zamiany obliczy liczbę klejnotów znikających do chwili całkowitego zakończenia reakcji łańcuchowej rozpoczętej jedną zamianą.

Wejście

Program ma czytać ze standardowego wejścia. Pierwszy wiersz zawiera dwie liczby całkowite $m,n$ ($3\le m\le80$; $3\le n\le80$), oznaczające liczbę wierszy i kolumn siatki. Każdy z kolejnych $m$ wierszy zawiera $n$ liczb całkowitych opisujących klejnoty w danym wierszu: $0$ oznacza bombę, $-1$ klejnot z vibranium, a liczby od $1$ do $9$, włącznie, zwykłe klejnoty. Ostatni wiersz zawiera cztery liczby całkowite $r_1,c_1,r_2,c_2$ ($1\le r_1,r_2\le m$; $1\le c_1,c_2\le n$), gdzie $(r_1,c_1)$ i $(r_2,c_2)$ to współrzędne dwóch różnych zwykłych klejnotów do zamiany. Współrzędne są numerowane od 1.

Wyjście

Program ma pisać na standardowe wyjście. Wypisz dokładnie jeden wiersz zawierający liczbę całkowitą oznaczającą łączną liczbę klejnotów, które znikną po zakończeniu wszystkich procesów.

Poniżej przedstawiono przykładowe wejście i wyjście dla dwóch przypadków testowych. (Przykładowe wejście 1 odpowiada rysunkowi 1(a).)

Przykład

Wejście 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

Wyjście 1

18

Wejście 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

Wyjście 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.