0578 - SecvEgale2
Sursa: 0578 - SecvEgale2
Cerinţa[edit | edit source]
Se dă un vector cu n elemente, numere naturale. Determinați câte secvențe ale vectorului au toate elementele egale.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n, apoi cele n elemente ale vectorului.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou va afișa pe ecran indicii st dr ai capetelor secvenței determinate, separați printr-un spațiu, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".
Restricţii şi precizări[edit | edit source]
- 1 ≤ n ≤ 100.000
- elementele vectorului vor fi mai mici decât 1.000.000.000
Exemplu 1[edit | edit source]
- Intrare
- 5
- 4 3 3 3 5
- Ieșire
- Datele sunt introduse corect.
- 8
Exemplu 2[edit | edit source]
- Intrare
- 5
- 4 3 3 3 5
- Ieșire
- Datele nu corespund restrictiilor inpuse.
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line>
- 0578 - SecvEgale2
def validate_input(n, arr):
if not 1 <= n <= 100000: return False if not all(0 <= x < 1000000000 for x in arr): return False return True
def longest_equal_seq(n, arr):
if not validate_input(n, arr): print("Datele nu corespund restricțiilor impuse.") return
count = 1 max_count = 1
for i in range(1, n): if arr[i] == arr[i - 1]: count += 1 else: max_count = max(max_count, count) count = 1
max_count = max(max_count, count) print("Datele sunt introduse corect.") print(max_count)
if __name__ == "__main__":
n = int(input().strip()) arr = list(map(int, input().strip().split())) longest_equal_seq(n, arr)
</syntaxhighlight>
Explicatie Rezolvare[edit | edit source]
arr -> vine de la lista
validate_input(n: int, arr: list[int]) -> bool: Această funcție primește doi parametri: numărul n și vectorul arr. Funcția verifică dacă numărul n respectă restricțiile impuse de problema (adica 1 ≤ n ≤ 100.000) și dacă toate elementele din vectorul arr sunt mai mici decât 1.000.000.000. Dacă restricțiile sunt respectate, funcția returnează True, altfel returnează False.
find_longest_equal_seq(n: int, arr: list[int]) -> None: Această funcție primește doi parametri: numărul n și vectorul arr. Funcția verifica dacă datele sunt introduse corect folosind funcția validate_input și, în caz afirmativ, găsește lungimea celei mai lungi secvențe a vectorului arr care conține elemente egale și afișează indicii capetelor acestei secvențe.
In if __name__ == "__main__"itim numărul n și vectorul arr folosind input de la utilizator. Apoi, apelăm funcția find_longest_equal_seq și afișăm rezultatul.