Rezolvare completă PbInfo #1939 Bare

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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Bare:

/*
    Autor: Banu Denis
    Solutie: 100p
*/

#include <fstream>
using namespace std;

ifstream fin("bare.in");
ofstream fout("bare.out");

int n,m,q,o,v;
int main()
{
    fin>>n>>m>>q;
    for (int i=1;i<=q;i++)
    {
        int x,y;
        char d;

        fin>>x>>y>>d;
        if (d=='O')
            o++;
        else
            v++;
    }
    fout<<q+min(o,v);

    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1939 Bare

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1939 Bare de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!