3587 - Duplicat

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerinta

Se dau un număr n și n+1 numere naturale cuprinse între 1 și n inclusiv. Cerința 1: Pentru un număr k citit, să se afișeze al k-lea termen al șirului citit anterior. Cerința 2: Știind că dintre cele n+1 numere citite, un singur număr se poate repeta, se cere să se afișeze acest număr.

Date de intrare

Programul citește de la tastatură numărul n pe prima linie, iar apoi, pe a doua linie n+1 numere naturale, separate prin spații. Pe a treia linie se va afla numărul k.

Date de iesire

Programul va afișa pe ecran pe prima linie răspunsul pentru cerința 1, iar pe a doua linie răspunsul pentru cerința 2.

Restrictii si precizari

  • 1 ⩽ n ⩽ 470000
  • Pentru cerința 2, un singur număr se poate repeta de mai multe ori
  • Atenție la limita de timp și de memorie !!!

Exemplul 1

Intrare
5
1 2 3 3 4 5
2
Iesire
Datele introduse corespund restrictiilor impuse
2
3

Exemplul 2

Intrare
-5
1 5 0 2 2 2.6
4
Iesire
Datele introduse nu corespund restrictiilor impuse


Rezolvare

def cerinta_1_si_2(n, numere, k):
    aparitii = [0] * (n + 1)

    for numar in numere:
        aparitii[numar] += 1

    frecventa_maxima = max(aparitii)
    numar_repetat = aparitii.index(frecventa_maxima)

    count = 0
    for numar in numere:
        if numar == numar_repetat:
            count += 1
            if count == 2:
                break

    index_k = numere[k - 1]
    return index_k, numar_repetat

def verificare_date_intrare(n, numere, k):
    if not (1 <= n <= 470000) or len(numere) != n + 1 or not all(1 <= numar <= n for numar in numere) or not (1 <= k <= n + 1):
        return False
    return True

# Citire numar de elemente
n = int(input("Introduceți numărul n: "))

# Citire vector de n+1 numere
numere = list(map(int, input("Introduceți n+1 numere, separate prin spațiu: ").split()))

# Citire numar k
k = int(input("Introduceți numărul k: "))

# Verificare date de intrare
if not verificare_date_intrare(n, numere, k):
    print("Datele introduse nu corespund restricțiilor impuse")
else:
    # Calcul și afișare rezultat
    rezultat_cerinta_1, rezultat_cerinta_2 = cerinta_1_si_2(n, numere, k)
    print(f"Răspuns pentru cerința 1: {rezultat_cerinta_1}")
    print(f"Răspuns pentru cerința 2: {rezultat_cerinta_2}")

Explicatie

Al doilea numar din șir este 2, iar numărul 3 se repeta.