0578 - SecvEgale2

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.

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 restrictiilor inpuse.


Rezolvare

Rezolvare ver. 1

# 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)

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.