0260 - Lungime

From Bitnami MediaWiki

Cerința[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 1 ⩽ n ⩽ 100.000


Exemplul 1[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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)

</syntaxhighlight>