0959 - secmax

De la Universitas MediaWiki

Sursa: 0959 - secmax


Cerinţa

Scrieți un program care citește numărul N, cele N cifre ale numărului X și care determină numărul total de secvenţe-maxim din numărul X.


Date de intrare

Fișierul de intrare secmax.in conține pe prima linie numărul natural N. Pe următoarea linie se află o succesiune de N cifre X1X2...XN, reprezentând cifrele numărului X.


Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect." secmax.out va conține pe prima linie un număr natural, reprezentând numărul total de secvenţe-maxim din numărul X, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 8 ≤ N ≤ 25000
  • 0 ≤ X1, X2 , ..., XN ≤ 9
  • X1 ≠ 0
  • o secvență-maxim este formată din cel puțin trei cifre

Exemplu 1

Intrare
secmax.in
8
12543644
Ieșire
Datele sunt introduse correct.
secmax.out
5

Exemplu 2

Intrare
secmax.in
-9
0 2 123458
Ieșire
Datele nu corespund restricțiilor impuse.


Rezolvare

Rezolvare ver. 1

# 0959 - secmax

def calculate_total_sequences(n, digits):
    if n < 3:
        return 0

    count = 0
    for i in range(n - 2):
        if digits[i] < digits[i + 1] > digits[i + 2]:
            count += 1

    return count


def validate_input(n, digits):
    if n < 8 or n > 25000:
        return False

    if any(digit < 0 or digit > 9 for digit in digits):
        return False

    if digits[0] == 0:
        return False

    return True


if __name__ == "__main__":
    with open("secmax.in", "r") as file:
        n = int(file.readline())
        digits = list(map(int, file.readline().split()))

    if validate_input(n, digits):
        print("Datele sunt introduse corect.")
        result = calculate_total_sequences(n, digits)
        with open("secmax.out", "w") as file:
            file.write(str(result))
    else:
        print("Datele nu corespund restricțiilor impuse.")

Explicatie Rezolvare

Sunt definite două funcții:

calculate_total_sequences(n, digits): Aceasta primește numărul n de cifre și lista digits care conține cifrele numărului X. Verifică dacă numărul de cifre este mai mic de 3 și, în caz afirmativ, returnează 0. În caz contrar, parcurge lista de cifre și numără secvențele-maxim.

validate_input(n, digits): Aceasta validează datele de intrare. Verifică dacă numărul n se încadrează în intervalul specificat și dacă prima cifră din lista digits este diferită de 0.

În blocul if __name__ == "__main__": se citesc datele de intrare din fișierul "secmax.in". Se validează datele folosind funcția validate_input. Dacă datele sunt corecte, se calculează numărul total de secvențe-maxim utilizând funcția calculate_total_sequences. Rezultatul este scris în fișierul "secmax.out". În caz contrar, se afișează un mesaj corespunzător.