2629 - H3: Difference between revisions
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
== Enunt == | == Enunt == | ||
Tocmai ai primit cadou de ziua ta un șir de numere naturale a[1], a[2], …, a[n]. Ca să te simți împlinit, trebuie să determini lungimea maximă a unei secvențe cu proprietatea că oricare două valori din secvență sunt distincte. | Tocmai ai primit cadou de ziua ta un șir de numere naturale '''a[1], a[2], …, a[n]'''. Ca să te simți împlinit, trebuie să determini lungimea maximă a unei secvențe cu proprietatea că oricare două valori din secvență sunt distincte. | ||
== Cerinta == | == Cerinta == | ||
Line 9: | Line 9: | ||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numărul n, apoi șirul de n numere naturale, separate prin spații. | Programul citește de la tastatură numărul '''n''', apoi șirul de '''n''' numere naturale, separate prin spații. | ||
== Date de iesire == | == Date de iesire == | ||
Line 17: | Line 17: | ||
== Restrictii si precizari == | == Restrictii si precizari == | ||
*1 | *1 ⩽ n ⩽ 1.000.000 | ||
*0 | *0 ⩽ a[i] ⩽ 1.000.000.000 | ||
== Exemplul 1 == | == Exemplul 1 == | ||
Line 25: | Line 25: | ||
:1 2 1 2 5 6 7 2 9 | :1 2 1 2 5 6 7 2 9 | ||
;Iesire | ;Iesire | ||
:Datele introduse corespund restrictiilor impuse | |||
:5 | :5 | ||
Line 33: | Line 33: | ||
:-10 0 5.2 8 3 | :-10 0 5.2 8 3 | ||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
Line 54: | Line 54: | ||
return lungime_maxima | return lungime_maxima | ||
def verificare_date_intrare(n, vector): | |||
if not (1 <= n <= 1000000) or len(vector) != n or not all(0 <= numar <= 1000000000 for numar in vector): | |||
return False | |||
return True | |||
# Citire numar de elemente | # Citire numar de elemente | ||
n = int(input(" | n = int(input("Introduceți numărul de elemente: ")) | ||
# Citire vector | # Citire vector | ||
vector = list(map(int, input(" | vector = list(map(int, input("Introduceți elementele vectorului, separate prin spațiu: ").split())) | ||
# Verificare date de intrare | |||
if not verificare_date_intrare(n, vector): | |||
print("Datele introduse nu corespund restricțiilor impuse") | |||
else: | |||
# Calcul și afișare rezultat | |||
rezultat = lungime_maxima_secventa_distincte(n, vector) | |||
print(f"Lungimea maximă a secvenței de valori distincte este: {rezultat}") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 12:29, 29 December 2023
Enunt[edit | edit source]
Tocmai ai primit cadou de ziua ta un șir de numere naturale a[1], a[2], …, a[n]. Ca să te simți împlinit, trebuie să determini lungimea maximă a unei secvențe cu proprietatea că oricare două valori din secvență sunt distincte.
Cerinta[edit | edit source]
Determină lungimea maximă cerută și anul viitor vei mai primi un șir!
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n, apoi șirul de n numere naturale, separate prin spații.
Date de iesire[edit | edit source]
Programul va afișa pe ecran lungimea maximă a secvenței de valori distincte.
Restrictii si precizari[edit | edit source]
- 1 ⩽ n ⩽ 1.000.000
- 0 ⩽ a[i] ⩽ 1.000.000.000
Exemplul 1[edit | edit source]
- Intrare
- 9
- 1 2 1 2 5 6 7 2 9
- Iesire
- Datele introduse corespund restrictiilor impuse
- 5
Exemplul 2[edit | edit source]
- Intrare
- 5
- -10 0 5.2 8 3
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def lungime_maxima_secventa_distincte(n, vector):
frecvente = dict() stanga = 0 lungime_maxima = 0
for dreapta in range(n): numar = vector[dreapta]
while frecvente.get(numar, 0) > 0: frecvente[vector[stanga]] -= 1 stanga += 1
frecvente[numar] = 1 lungime_maxima = max(lungime_maxima, dreapta - stanga + 1)
return lungime_maxima
def verificare_date_intrare(n, vector):
if not (1 <= n <= 1000000) or len(vector) != n or not all(0 <= numar <= 1000000000 for numar in vector): return False return True
- Citire numar de elemente
n = int(input("Introduceți numărul de elemente: "))
- Citire vector
vector = list(map(int, input("Introduceți elementele vectorului, separate prin spațiu: ").split()))
- Verificare date de intrare
if not verificare_date_intrare(n, vector):
print("Datele introduse nu corespund restricțiilor impuse")
else:
# Calcul și afișare rezultat rezultat = lungime_maxima_secventa_distincte(n, vector) print(f"Lungimea maximă a secvenței de valori distincte este: {rezultat}")
</syntaxhighlight>
Explicatie[edit | edit source]
Secvența de lungime maximă 5 este 1 2 5 6 7.