Cerința
Pe o tablă de joc cu N
linii și M
coloane se află un roboțel pe poziția 1,1
. El știe să meargă doar pe conturul tablei (prima și ultima linie, respectiv prima și ultima coloană). Robotul dorește să ajungă pe poziția N, M
dar nu este așa simplu. Pe tabla de joc se află Q
bare de lungimi infinite. Barele sunt fixate în colțul din dreapta jos a unor căsuțe. La început, o bară se poate afla fie în poziție verticală, fie în poziție orizontală. Robotul poate schimba orientarea acestor bare din poziție verticală în poziție orizontală și invers. El nu poate trece printr-o bară.
Cerința
Pe o tablă de joc cu N
linii și M
coloane se află un roboțel pe poziția 1,1
. El știe să meargă doar pe conturul tablei (prima și ultima linie, respectiv prima și ultima coloană). Robotul dorește să ajungă pe poziția N, M
dar nu este așa simplu. Pe tabla de joc se află Q
bare de lungimi infinite. Barele sunt fixate în colțul din dreapta jos a unor căsuțe. La început, o bară se poate afla fie în poziție verticală, fie în poziție orizontală. Robotul poate schimba orientarea acestor bare din poziție verticală în poziție orizontală și invers. El nu poate trece printr-o bară.
De exemplu, dacă avem N=4
, M=4
, Q=1
și bara se află la coordonatele 3,3
în poziție verticală, robotul nu poate ajunge la căsuțele de pe coloana 4
. Dar dacă el învârte bara poate merge pe coloana 4
, apoi pentru a merge pe linia 4
poate să învârtă bara din nou.
Această soluție nu este optimă deoarece robotul putea ajunge în poziția 4,4
învârtind o singură dată bara. Mai întâi se poziționează pe linia 4
, apoi învârte bara și se duce pe coloana 4
.
Să se afle numărul minim de rotiri ale barelor pentru ca robotul să ajungă din poziția 1,1
în poziția N,M
, mergând numai în dreapta și în jos.
Date de intrare
Fișierul de intrare bare.in
conține pe prima linie trei numere N
, M
și Q
reprezentând numărul de coloane și numărul de linii pe care îl are tabla de joc, respectiv numărul de bare care se află pe tablă. Pe următoarele Q
linii se găsesc câte trei valori X[i] Y[i] K[i]
, unde X[i] Y[i]
reprezintă linia și coloana căsuței în care se află bara, iar K[i]
reprezintă orientarea barei (poate fi verticală V
sau orizontală O
).
Date de ieșire
Fișierul de ieșire bare.out
va conține pe prima linie o singură valoare ce reprezintă numărul minim de rotiri ale barelor pentru ca robotul să ajungă din poziția 1,1
în poziția N,M
.
Restricții și precizări
3 ≤ N,M ≤ 10000
0 ≤ Q ≤ min(N,M)
- Oricare două bare nu vor fi fixate pe aceeași linie sau pe aceeași coloană.
Exemplul 1
bare.in
4 4 1 3 3 V
bare.out
1
Explicație
Robotul pornește din 1, 1
, apoi se duce în căsuța 4,1
→ învârte bara apoi se poate duce în 4,4
.
Exemplul 2
bare.in
4 5 3 3 4 V 2 1 O 1 2 V
bare.out
4
Explicație
Robotul pornește din 1, 1
întoarce bara din căsuța 2,1
→ se duce în căsuța 4,1
apoi întoarce toate cele 3
bare și se duce în căsuța 4,4
.
#include <bits/stdc++.h> using namespace std; ifstream cin("bare.in"); ofstream cout("bare.out"); int main() { int n , m , q; cin >> n >> m >> q; int x , y; char ch; int cntv = 0 , cnto = 0; for(int i = 1 ; i <= q ; ++i) { cin >> x >> y >> ch; if(ch == 'V') cntv++; else cnto++; } if(cntv < cnto) cout << 2*cntv + cnto; else cout << 2*cnto + cntv; return 0; }