0663 - Lungime 1

De la Universitas MediaWiki

Cerința

Se dă un șir cu n elemente, numere naturale nenule, î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 lungime1in.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 lungime1out.txt va conţine pe prima linie numărul L, reprezentând lungimea maximă determinată.

Restricții și precizări

  • 1 ⩽ n ⩽ 100.000
  • elementele șirului sunt numere naturale nenule mai mici sau egale cu 100.000

Exemplul 1

Intrare
lungime1in.txt
12
2 13 10 5 10 12 6 7 5 10 12 8
Ieșire
Datele de intrare corespund restricțiilor impuse
lungime1out.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

#0663 - Lungime1

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("lungime1out.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("lungime1in.txt", "r") as f:
        n = int(f.readline())
        sir = list(map(int, f.readline().split()))
    lungime_maxima_secventa(n, sir)