Sokoban

Time limit: 0.4s Memory limit: 111MB Input: sokoban.in Output: sokoban.out

Claudiu\text{Claudiu} este fascinat de jocuri puzzle de tip Sokoban\text{Sokoban}, în care scopul este împingerea unor cutii la anumite destinații. Simțindu-se dornic de o provocare, el l-a rugat pe prietenul său ChatGPT\text{ChatGPT} să îi creeze un astfel de puzzle. Din păcate, ChatGPT\text{ChatGPT} a greșit implementarea, așa că, pe tot parcursul jocului, player-ul nu se poate îndepărta de marginea cutiei. Claudiu\text{Claudiu} realizează că puzzle-ul s-ar putea să fie prea greu pentru el, iar cum el trebuie să se pregătească pentru Olimpiada Județeana˘ de Informatica˘\text{Olimpiada Județeană de Informatică}, vă roagă pe voi să găsiți o soluție.

Cerință

Se dă o matrice N×MN\times M reprezentând puzzle-ul creat de ChatGPT\text{ChatGPT}. Acesta conține un player, o cutie de dimensiuni Nc×McN_c\times M_c, o poziție unde trebuie să ajungă player-ul, și diverse obstacole. Așadar, fiecare celulă poate fi de următoarele tipuri:

  • Un spațiu liber, prin care pot trece atât cutia, cât și player-ul;
  • Un obstacol prin care poate trece cutia, dar nu player-ul;
  • Un perete prin care nu pot trece nici cutia și nici player-ul;
  • Un spațiu liber ocupat de player la început;
  • Un spațiu liber ocupat de cutie la început;
  • Un spațiu liber ce trebuie ocupat de player la final.

Într-un pas, player-ul se poate mișca în una din cele 44 direcții cardinale. Dacă cutia ocupă această celulă, ea va fi împinsă în direcția corespunzătoare. Această mutare se poate realiza doar dacă la finalul ei player-ul și cutia ocupă poziții valide. Din cauza greșelii lui ChatGPT\text{ChatGPT}, atât la început, cât și la finalul fiecărei mutări, player-ul trebuie să se afle pe marginea cutiei (vezi Restricții și preciza˘ri\textbf{Restricții și precizări} pentru definiții formale).
Să se determine numărul minim de pași necesari pentru ca player-ul să ajungă la destinația sa finală.

Date de intrare

Pe prima linie a fișierului de intrare sokoban.in se găsesc 44 numere întregi, N,M,Nc,McN, M, N_c, M_c, cu semnificația din enunț. Pe următoarele NN linii se găsesc câte MM caractere, care reprezintă descrierea matricii:

  • . - spațiu liber;
  • w - obstacol prin care poate trece doar cutia;
  • W - perete prin care nu poate trece nimic;
  • P - poziția de început a player-ului;
  • B - un spațiu ocupat de cutie la început;
  • F - destinația finală a player-ului.

Date de ieșire

Pe singura linie a fișierului de ieșire sokoban.out se va afla un singur număr întreg, ce va reprezenta numărul minim de pași pentru ca player-ul să ajungă la destinație.

Restricții și precizări

  • 1N,M1 0001 \leq N, M \leq 1 \ 000;
  • 1Nc,Mc51 \leq N_c, M_c \leq 5;
  • Din celula (i,j)(i, j), player-ul se poate mișca în una din celulele (i1,j),(i,j+1),(i+1,j),(i,j1)(i-1, j), (i, j+1), (i+1, j), (i, j-1), atât timp cât acestea se află în matrice;
  • Celula (i,j)(i, j) este considerată pe marginea cutiei\textit{pe marginea cutiei} dacă cel puțin una din celulele
    (i1,j1),(i1,j),(i1,j+1),(i,j+1),(i+1,j+1),(i+1,j),(i+1,j1),(i,j1)(i-1, j-1), (i-1, j), (i-1, j+1), (i, j+1), (i+1, j+1), (i+1, j), (i+1, j-1), (i, j-1) este ocupată de cutie;
  • Se garantează că există exact un caracter P și exact un caracter F în datele de intrare;
  • Se garantează că toate caracterele B din datele de intrare formează un dreptunghi Nc×McN_c\times M_c în matrice;
  • Se garantează că player-ul este pe marginea cutiei în poziția inițială dată de datele de intrare;
  • Se garantează că player-ul poate ajunge la destinația sa finală urmând regulile descrise (ChatGPT\text{ChatGPT} a avut grijă să creeze un puzzle rezolvabil).

Subtask-uri și punctare

Subtask Punctaj Restricții suplimentare
1 5 Nc=2N_c=2 și \\ Există o secvență cu număr minim de pași în care player-ul împinge cutia doar la dreapta
2 15 Există o secvență cu număr minim de pași în care player-ul împinge cutia doar la dreapta
3 10 N,M20N, M\leq 20 și Nc=Mc=1N_c=M_c=1
4 20 N,M20N, M\leq 20
5 20 Nc=Mc=1N_c=M_c=1
6 30 Fără restricții suplimentare

Exemplul 1

sokoban.in

3 3 1 1
WW.
PBF
W..

sokoban.out

4

Explicație

Exemplul 2

sokoban.in

2 5 1 1
.FPB.
WW...

sokoban.out

7

Explicație

Exemplul 3

sokoban.in

3 5 2 2
WWFWW
WBB..
PBB..

sokoban.out

4

Explicație

Exemplul 4

sokoban.in

7 9 5 1
WWWWWWWWw
.Bw.w...w
.B..w.w.w
PBw.w.w.w
.Bw...w.w
.Bw.w.w.F
WWWWWWW..

sokoban.out

20

Explicație

Log in or sign up to be able to send submissions!