Sari la conținut

Cunoștințe necesare

Soluția problemei cartonase (OJI 2020, clasa a V-a)#

Link problemă

Această problemă poate fi accesată aici.

Se citesc numerele de pe cartonașe, reținând la un moment dat numerele de pe două cartonașe alăturate (citite consecutiv), anume cartonașul precedent și cel curent.

Pentru a rezolva cerința 1, folosim un contor pentru a verifica câte dintre perechile de cartonașe se potrivesc (mai precis, dacă capătul dreapta precedent este egal cu capătul stânga curent).

Pentru cerințele 2 și 3, vom proceda similar, singura diferență fiind faptul că vom păstra numărul de perechi consecutive valide, precum și lungimea maximă a unei asemenea secvențe.

Mai jos puteți găsi o soluție neoficială care ia punctajul maxim.

#include <fstream>
using namespace std;

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

int c, n, i, lp, rp, l, r, cnt, lg, lgmax;

int main() {
    fin >> c >> n;

    if (c == 1) {
        fin >> lp >> rp;
        for (i = 2; i <= n; i++) {
            fin >> l >> r;
            if (l == rp) {
                cnt++;
            }
            lp = l, rp = r;
        }
        fout << cnt << '\n';
    } 
    else if (c == 2) {
        fin >> lp >> rp;
        lg = 1;
        for (i = 2; i <= n; i++) {
            fin >> l >> r;
            if (l == rp) {
                lg++;
                if (lg > lgmax) {
                    lgmax = lg;
                }
            } 
            else {
                lg = 1;
            }
            lp = l, rp = r;
        }
        fout << lgmax << '\n';
    } 
    else {
        fin >> lp >> rp;
        lg = 1;
        for (i = 2; i <= n; i++) {
            fin >> l >> r;
            if (l == rp) {
                lg++;
                if (lg > lgmax) {
                    lgmax = lg;
                    cnt = 1;
                } 
                else if (lg == lgmax) {
                    cnt++;
                }
            } 
            else {
                lg = 1;
            }
            lp = l, rp = r;
        }
        fout << cnt << '\n';
    }
    return 0;
}