0578 - SecvEgale2: Difference between revisions
No edit summary |
No edit summary |
||
(6 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
== Date de ieșire == | == 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 == | == Restricţii şi precizări == | ||
* 1 ≤ n ≤ 100.000 | * 1 ≤ n ≤ 100.000 | ||
* elementele vectorului vor fi mai mici decât 1.000.000.000 | * elementele vectorului vor fi mai mici decât 1.000.000.000 | ||
== Exemplu == | == Exemplu 1 == | ||
; Intrare | ; Intrare | ||
: 5 | : 5 | ||
: 4 3 3 3 5 | : 4 3 3 3 5 | ||
; Ieșire | ; Ieșire | ||
: Datele sunt introduse corect. | |||
: 8 | : 8 | ||
== Exemplu 2 == | |||
; Intrare | |||
: 5 | |||
: 4 3 3 3 5 | |||
; Ieșire | |||
: Datele nu corespund restrictiilor inpuse. | |||
== Rezolvare == | == Rezolvare == | ||
Line 25: | Line 35: | ||
# 0578 - SecvEgale2 | # 0578 - SecvEgale2 | ||
def | def validate_input(n, arr): | ||
n = | 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 | |||
for i in range( | |||
if | |||
else: | 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__ == | if __name__ == "__main__": | ||
n = int(input().strip()) | |||
arr = list(map(int, input().strip().split())) | |||
longest_equal_seq(n, arr) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Explicatie Rezolvare == | |||
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. |
Latest revision as of 20:31, 14 May 2023
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.