0578 - SecvEgale2
Sursa: 0578 - SecvEgale2
Cerinţa
Se dă un vector cu n elemente, numere naturale. Determinați câte secvențe ale vectorului au toate elementele egale.
Date de intrare
Programul citește de la tastatură numărul n, apoi cele n elemente ale vectorului.
Date de ieșire
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
- 1 ≤ n ≤ 100.000
- elementele vectorului vor fi mai mici decât 1.000.000.000
Exemplu 1
- Intrare
- 5
- 4 3 3 3 5
- Ieșire
- Datele sunt introduse corect.
- 8
Exemplu 2
- Intrare
- 5
- 4 3 3 3 5
- Ieșire
- Datele nu corespund restricțiilor impuse.
- 3
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line>
- 0578 - SecvEgale2
def longest_equal_seq(n, arr):
if not 1 <= n <= 100000: print("Datele nu corespund restricțiilor impuse.") return if not all(0 <= x < 1000000000 for x in 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
Funcția find_equal_sequences primește numărul de elemente n și vectorul v și determină câte secvențe ale vectorului au toate elementele egale. Înainte de a face calculul, se verifică restricțiile impuse. Se construiește un dicționar freq în care cheile sunt elementele distincte din vector, iar valorile sunt frecvențele lor. Frecvența maximă se determină cu funcția max, iar numărul de elemente cu această frecvență se determină cu o buclă for și o expresie generator sum(1 for f in freq.values() if f == max_freq). În funcția if __name__ == "__main__":, se citește mai întâi numărul de elemente n, iar apoi vectorul de numere arr, pe care le pasăm funcției longest_equal_seq pentru a efectua prelucrarea datelor și afișarea rezultatului.