0260 - Lungime

De la Universitas MediaWiki

Cerința

Se dă un sir cu n elemente, numere naturale nenule cu cel mult 2 cifre fiecare, în care cel puţin un element se repetă. Să se determine lungimea maximă a unei secvenţe de elemente din şir, cu proprietatea că primul şi ultimul element din secvenţă au aceeaşi valoare.

Date de intrare

Fişierul de intrare lungimein.txt conţine pe prima linie numărul n; urmează n numere naturale separate prin spaţii, reprezentând elementele şirului, ce pot fi dispuse pe mai multe linii.

Date de ieșire

Fişierul de ieşire lungimeout.txt va conţine pe prima linie numărul L, reprezentând lungimea maximă determinată.

Restricții și precizări

  • 1 ⩽ n ⩽ 100.000


Exemplul 1

Intrare
lungimein.txt
12
2 13 10 5 10 12 6 7 5 10 12 8
Ieșire
Datele de intrare corespund restricțiilor impuse
lungimeout.txt
8

Explicație

Cea mai lungă secvenţă de elemente în care primul şi ultimul element sunt egale este 10 5 10 12 6 7 5 10, şi are lungimea 8.

Exemplul 2

Intrare
lungimein.txt
100001
2 13 10 5 10 12 6 7 5 10 12 8
Ieșire
Datele de intrare NU corespund restricțiilor impuse

Rezolvare

#0260 - Lungime

def validare_date_intrare(n, sir):
    if not 1 <= n <= 100000:
        return False
    if len(sir) != n:
        return False
    for numar in sir:
        if not 1 <= numar <= 99:
            return False
    return True


def lungime_maxima_secventa(n, sir):
    if validare_date_intrare(n, sir):
        print("Datele de intrare corespund restricțiilor impuse")
        lungime_maxima = 0
        for i in range(n):
            for j in range(i, n):
                if sir[i] == sir[j]:
                    lungime_curenta = j - i + 1
                    if lungime_curenta > lungime_maxima:
                        lungime_maxima = lungime_curenta
        with open("lungimeout.txt", "w") as out_file:
            out_file.write(str(lungime_maxima) + "\n")
    else:
        print("Datele de intrare NU corespund restricțiilor impuse")
        exit(0)


if __name__ == "__main__":
    with open("lungimein.txt", "r") as f:
        n = int(f.readline())
        sir = list(map(int, f.readline().split()))
    lungime_maxima_secventa(n, sir)