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 10
6
numere naturale din intervalul [0,10
9
]
ș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 10
6
numere naturale din intervalul [0,10
9
]
, 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; }