fbpx

Problema #2806 – SecventaPara – Rezolvari PBInfo

de Mihai-Alexandru

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
#include <bits/stdc++.h>
using namespace std;
ifstream cin("secventapara.in");
ofstream cout("secventapara.out");
int x , l , lmax , cnt;
int main()
{
    while(cin >> x)
        if(x % 2 == 0) l++;
        else
        {
            if(l > lmax) lmax = l , cnt = 1;
            else if(l == lmax) cnt++;
            l = 0;
        }
    if(l == lmax) cnt++;
    if(l > lmax) cout << 1;
    else cout << cnt;
    return 0;
}
Comentarii

S-ar putea sa iti placa