0523 - SecvEgale

From Bitnami MediaWiki
Revision as of 20:59, 21 March 2023 by Flaviu (talk | contribs) (Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/523/secvegale 0523 - SecvEgale] ---- == Cerinţa == Se dă un vector cu n elemente, numere naturale. Determinați cea mai lungă secvență de elemente egale din vector. Dacă în vector există mai multe secvențe de elemente egale de lungime maximă se va determina cea mai din dreapta. == Date de intrare == Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului. == Date de ieșir...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursa: 0523 - SecvEgale


Cerinţa

Se dă un vector cu n elemente, numere naturale. Determinați cea mai lungă secvență de elemente egale din vector. Dacă în vector există mai multe secvențe de elemente egale de lungime maximă se va determina cea mai din dreapta.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului.

Date de ieșire

Programul va afișa pe ecran indicii st dr ai capetelor secvenței determinate, separați printr-un spațiu.

Restricţii şi precizări

  • 1 ≤ n ≤ 1000
  • cele n numere citite vor fi mai mici decât 1000
  • indicii elementelor vectorului sunt cuprinși între 1 și n

Exemplu

Intrare
10
5 5 1 1 1 1 2 2 2 2
Ieșire
7 10

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line>

  1. 0523 - SecvEgale

n = int(input("Introduceți numărul de elemente din vector: ")) v = list(map(int, input("Introduceți elementele vectorului: ").split()))

  1. Initializăm variabilele pentru secvența maximă

max_len = 1 max_start = 0 max_end = 0

  1. Parcurgem vectorul incepand de la elementul 1

i = 1 while i < n:

   # Daca elementul curent este egal cu cel anterior
   if v[i] == v[i-1]:
       # Determinăm lungimea secvenței curente
       len_seq = 2
       j = i + 1
       while j < n and v[j] == v[j-1]:
           len_seq += 1
           j += 1
       # Verificăm dacă secvența curentă este mai lungă decât cea maximă
       if len_seq > max_len:
           max_len = len_seq
           max_start = i - 1
           max_end = j - 1
       # Daca există mai multe secvențe de aceeași lungime maximă
       # Alegem secvența mai din dreapta
       elif len_seq == max_len and j - 1 > max_end:
           max_start = i - 1
           max_end = j - 1
       i = j
   else:
       i += 1
  1. Afisăm capetele secvenței maximale

print(max_start, max_end)

</syntaxhighlight>