Rezolvare completă PbInfo #2796 SecventeNeuniforme

Cerința

Numim secvență neuniformă a unui șir de numere naturale un subșir al acestuia, format din termeni aflați pe poziții consecutive în șirul dat, cu proprietatea că oricare trei termeni aflați pe poziții consecutive sunt diferiți. Lungimea secvenței este egală cu numărul de termeni ai acesteia.

Se dă un șir de cel mult 106 numere naturale din intervalul [0,9], în care există cel puțin trei termeni diferiți pe poziții consecutive. Se cere să se afișeze lungimea maximă a unei secvențe neuniforme a șirului dat.

Date de intrare

Fișierul de intrare secventeneuniforme.in conține un șir de cel mult 106 numere naturale din intervalul [0,9] separate prin spații.

Date de ieșire

Fișierul de ieșire secventeneuniforme.out va conține pe prima linie lungimea maximă a unei secvențe neuniforme a șirului aflat în fișierul de intrare.

Restricții și precizări

  • proiectați un algoritm eficient din punctul de vedere al timpului de executare și al memoriei utilizate;
    • se recomandă o soluție care să nu folosească tablouri sau alte structuri de date similare.

Exemplu

secventeneuniforme.in

7 7 1 3 7 7 5 3 3 3 7 8 9

secventeneuniforme.out

4

Explicație

Lungimea maximă a unei secvențe neuniforme este 4. Sunt două secvențe neuniforme de lungime maximă: 7 1 3 7 și 3 7 8 9.

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 SecventeNeuniforme:

#include <iostream>
#include <fstream>

using namespace std;

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

int main(){
    int a , b ,c, lg = 0, lgmax = 0;;
    fin >> a >> b;
    while(fin >> c)
    {
        if(a != b && b != c && c != a)
            lg ++;
        else
            lg = 0;
        if(lg > lgmax)
            lgmax = lg;
        a = b;
        b = c;
    }
    fout << lgmax + 2;
    fin.close();
    fout.close();
    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 #2796 SecventeNeuniforme

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2796 SecventeNeuniforme 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!