EscapeLight

Time limit: 0.5s Memory limit: 64MB Input: escapelight.in Output: escapelight.out

Labirintul EscapeLight este reprezentat printr-o matrice de dimensiuni NMN \cdot M, unde fiecare celulă reprezintă o cameră. Fiecare cameră poate fi de unul dintre următoarele tipuri:

  • Tipul 00: cameră cu bec stins,
  • Tipul 11: cameră cu bec aprins,
  • Tipul 22: cameră fără bec,
  • Tipul 33: cameră echipată cu un întrerupător.

Camerele de tip 33 sunt conectate la becuri din alte camere de tip 0 sau 1. Când cineva intră într-o cameră cu întrerupător, are posibilitatea să treacă mai departe fără a-l act, iona sau să-l apese. Apăsarea întrerupătorului inversează starea tuturor becurilor conectate (becurile aprinse se sting, iar cele stinse se aprind).
Andrei pornește dintr-o cameră aflată la coordonatele (xstart,ystart)(x_{start}, y_{start}) și trebuie să ajungă la o cameră situată la (xstop,ystop)(x_{stop}, y_{stop}), deplasându-se exclusiv prin camere luminoase (adică, camerele în care becul este aprins). Scopul este de a găsi drumul de distanță minimă, măsurat în numărul de camere parcurse, ținând cont de posibilitatea de a utiliza întrerupătoarele pentru a schimba starea luminilor.

Date de intrare

Prima linie a fișierului de intrare conține două numere întregi NN și MM, reprezentând numărul de linii și coloane ale labirintului.
Următoarele NN linii conțin câte MM numere, separate prin spații, fiecare reprezentând tipul camerei:

  • 00 — cameră cu bec stins,
  • 11 — cameră cu bec aprins,
  • 22 — cameră fără bec,
  • 33 — cameră cu întrerupător.

A doua secțiune a inputului este formată dintr-o linie care conține patru numere întregi: xstart,ystart,xstopx_{start}, y_{start}, x_{stop} și ystopy_{stop}, reprezentând coordonatele camerei de start și ale camerei de destinație.

Următoarea linie conține un număr întreg KK, reprezentând numărul de conexiuni și un număr întreg PP, reprezentând numărul de camere de tip 33.

Fiecare din următoarele KK linii conține patru numere întregi: xswitch,yswitch,xlight,ylightx_{switch}, y_{switch}, x_{light}, y_{light}, indicând că întrerupătorul din camera de coordonate (xswitch,yswitch)(x_{switch}, y_{switch}) este conectat la becul din camera de coordonate (xlight,ylight)(x_{light}, y_{light}).

Date de ieșire

Programul va afișa un singur număr, reprezentând numărul minim de camere parcurse pentru a ajunge de la poziția de start la poziția de destinație, ținând cont de posibilitatea de a utiliza întrerupătoarele.

Restricții și precizări

  • 1N,M1501 \leq N, M \leq 150
  • 0K1050 \leq K \leq 10^5
  • 0P100 \leq P \leq 10
  • 1xstart,xstopN,1ystart,ystopM1 \leq x_{start}, x_{stop} \leq N, 1 \leq y_{start}, y_{stop} \leq M
  • Pentru fiecare conexiune: 1xswitch,xlightN,1yswitch,ylightM1 \leq x_{switch}, x_{light} \leq N, 1 \leq y_{switch}, y_{light} \leq M
  • Conexiunile se vor face doar între camerele de tip 33 (întrerupătoare) și camerele de tip 00 sau 11.
  • Camerele de tip 33 sunt considerate mereu luminoase.
  • Se garantează existența unei soluții.
# Puncte Restricții
1 10 K=0K=0
2 10 K=1K=1
3 10 P=1,K2P = 1, K \geq 2.
4 15 P=2P = 2.
5 55 Pentru restul testelor se respectă restricțiile generale.

Exemplu

escapelight.in

3 3
1 0 2
3 1 0
2 0 1
1 1 3 3
2 1
2 1 1 2
2 1 3 2

escapelight.out

5

Explicație

În exemplul de mai sus, labirintul are 33 linii și 33 coloane. Andrei începe din camera (1,1)(1, 1), care este luminată (tipul 11), iar destinația este camera (3,3)(3, 3), tot luminată (tipul 11). Deoarece unele camere inițial sunt întunecate, Andrei trebuie să utilizeze întrerupătorul din camera (2,1)(2, 1) (tipul 33) pentru a aprinde becurile din camerele (1,2)(1, 2) și (3,2)(3, 2), astfel încât să îi permită accesul la o cale validă. Drumul minim găsit are 55 camere parcurse.

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