Cerință
Harta orașului Old Non este reprezentată ca o matrice imensă cu linii și coloane. Liniile sunt numerotate de sus în jos, de la la , iar coloanele de la stânga la dreapta, de la la . O poziție pe hartă este dată printr-o pereche , unde este indicele liniei (poziția pe verticală), iar este indicele coloanei (poziția pe orizontală); astfel, colțul din stânga-sus al hărții are coordonatele .
Personajul nostru, Nefe, se află în mașina sa excentrică, care ocupă o zonă dreptunghiulară pe hartă. El trebuie să parcheze mașina într-unul dintre spațiile de parcare special amenajate, evitând în același timp clădirile și alte obstacole din oraș.
Mașina lui Nefe se poate deplasa doar prin translație în sus, jos, stânga sau dreapta. Prin translație înțelegem că întreaga mașină se mută rigid, păstrându-și forma și dimensiunile (nu se rotește și nu se deformează): la o mutare, toate celulele din care este formată mașina se deplasează simultan cu o unitate în aceeași direcție.
Regulile orașului sunt stricte când vine vorba de deplasarea autovehiculelor:
- Nicio parte a mașinii nu are voie să părăsească limitele matricei: orice celulă a mașinii trebuie să aibă linia în intervalul și coloana în intervalul .
- Nicio parte a mașinii nu se poate suprapune, nici măcar parțial, peste un obstacol.
- Pentru a fi considerată „parcată”, mașina trebuie să se afle integral în interiorul unei zone de parcare valide.
Nefe vrea să afle numărul minim de mutări necesare pentru a duce mașina din poziția inițială într-o poziție de parcare validă. Dacă acest lucru este imposibil, se va afișa .
Date de intrare
Fișierul de intrare park.in conține pe prima linie numere întregi separate prin spații: , , , , , , reprezentând numărul de linii și numărul de coloane ale orașului, urmate de coordonatele colțului stânga-sus, respectiv dreapta-jos, ale mașinii în poziția inițială.
A doua linie conține un număr întreg , reprezentând numărul de obstacole.
Următoarele linii conțin câte numere întregi , , , , reprezentând coordonatele colțului stânga-sus și dreapta-jos ale fiecărui obstacol.
Următoarea linie conține un număr întreg , reprezentând numărul zonelor de parcare.
Următoarele linii conțin câte numere întregi , , , , reprezentând coordonatele colțurilor stânga-sus și dreapta-jos ale fiecărei zone de parcare.
Date de ieșire
Fișierul de ieșire park.out va conține un singur număr întreg: numărul minim de mutări necesare pentru a parca mașina. Dacă mașina nu poate ajunge în nicio parcare validă, se va afișa .
Restricții și precizări
- ;
- și ;
- ;
- Toate coordonatele obstacolelor și parcărilor se află în interiorul limitelor orașului.
- Mașina, obstacolele și parcările din datele de intrare sunt toate reprezentate de dreptunghiuri disjuncte două câte două.
- Unele dintre valorile din datele de intrare, precum și răspunsul, pot depăși domeniul tipului întreg pe de biți; se recomandă utilizarea unui tip de date pe de biți (de exemplu,
long longîn C++). De asemenea, se garantează că răspunsul nu va depăși domeniul tipului de date întreg cu semn pe de biți (de exemplu,long longîn C++).
Punctaj pe subtaskuri
| # | Punctaj | Restricții |
|---|---|---|
| , , | ||
| , | ||
| , | ||
| , , | ||
| , | ||
| Fără restricții suplimentare |
Exemplu
park.in
8 6 0 0 1 1
1
4 0 5 3
2
5 4 5 4
6 0 7 1
park.out
14
Explicație
Matricea are linii și coloane. Mașina este un dreptunghi (mai exact, un pătrat în acest caz) de , aflat inițial cu colțul din stânga-sus în , adică în linia , coloana .
Dintre cele două parcări, prima (de dimensiune ) este prea mică pentru ca mașina să încapă integral în ea, deci nu poate fi folosită. Rămâne parcarea –, în care mașina încape exact.
Deplasarea directă în jos (de-a lungul coloanelor și ) este blocată de obstacolul – (liniile –, coloanele –). Pentru a-l ocoli, mașina se deplasează coloane la dreapta (în coloanele –), coboară linii pentru a trece de obstacol, apoi revine coloane la stânga, intrând complet în parcare. În total mutări, ceea ce reprezintă și minimul posibil.