Rezolvare completă PbInfo #2806 SecventaPara

Cerința

Numim secvență pară într-un șir o succesiune de termeni ai șirului cu proprietatea că sunt numere pare și că se află pe poziții consecutive în șir; orice secvență are cel puțin doi termeni și este maximală în raport cu proprietatea precizată (dacă i se adaugă un alt termen, secvența își pierde această proprietate). Lungimea secvenței este egală cu numărul termenilor săi.

Scrieți un program care citește un șir de cel mult 106 numere naturale din intervalul [0,109] și determină numărul de secvențe pare de lungime maximă din șir.

Date de intrare

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

Date de ieșire

Fișierul de ieșire secventapara.out va conține pe prima linie numărul de secvențe pare de lungime maximă din șir.

Restricții și precizări

  • Proiectați un algoritm eficient din punctul de vedere al spațiului de memorie utilizat şi al timpului de executare:
    • se recomandă o soluție care să nu memoreze elementele șirului într-un tablou sau altă structură de date similară.

Exemplu

secventapara.in

1 2 3 4 6 10 2 8 5 7 9 4 6 10 121 20 4 11 10 2 5 2 6 8 10 16

secventapara.out

2

Explicație

Secvențele pare din șir sunt:

4 6 10 2 8
4 6 10
20 4
10 2
2 6 8 10 16

Dintre acestea, au lungime maximă secvențele:

4 6 10 2 8
2 6 8 10 16

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

#include <iostream>
#include <fstream>

using namespace std;

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

int main(){
    int x, lgmax = -1, lg = 0, cntmax = 0;
    
    while(fin>>x)
        if(x % 2 == 1)
            lg = 0;
        else
        {
            lg ++;
            if(lg >= 2)
            {
                if(lg > lgmax)
                    lgmax = lg, cntmax = 1;
                else
                    if(lg == lgmax)
                        cntmax ++;
            }
        }
    fout << cntmax;
    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 #2806 SecventaPara

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