0663 - Lungime 1

From Bitnami MediaWiki
Revision as of 12:16, 17 December 2023 by Vasiliu Costel Andrei (talk | contribs) (Pagină nouă: == 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 l...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit | edit source]

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

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

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

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

Exemplul 1[edit | edit source]

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

</syntaxhighlight>