0578 - SecvEgale2: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/524/secvegale1 0578 - SecvEgale2] ---- == Cerinţa == Se dă un vector cu n elemente, numere naturale. Determinați câte secvențe ale vectorului au toate elementele egale. == Date de intrare == Programul citește de la tastatură numărul n, apoi cele n elemente ale vectorului. == Date de ieșire == Programul va afișa pe ecran numărul C, reprezentând valoarea cerută. == Restricţii şi precizări == * 1 ≤ n ≤ 100.000 * elem...
 
Flaviu (talk | contribs)
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 8: Line 8:


== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran numărul C, reprezentând valoarea cerută.
Dacă datele sunt introduse corect, pe ecran se va afișa:
'''"Datele sunt introduse corect."''', apoi pe un rând nou ''' va afișa pe ecran indicii st dr ai capetelor secvenței determinate, separați printr-un spațiu''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''.


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 1 ≤ n ≤ 100.000
* 1 ≤ n ≤ 100.000
* elementele vectorului vor fi mai mici decât 1.000.000.000
* elementele vectorului vor fi mai mici decât 1.000.000.000
== Exemplu ==
== Exemplu 1 ==
; Intrare
; Intrare
: 5
: 5
: 4 3 3 3 5
: 4 3 3 3 5
; Ieșire
; Ieșire
: Datele sunt introduse corect.
: 8
: 8
== Exemplu 2 ==
; Intrare
: 5
: 4 3 3 3 5
; Ieșire
: Datele nu corespund restrictiilor inpuse.


== Rezolvare ==  
== Rezolvare ==  
Line 25: Line 35:
# 0578 - SecvEgale2
# 0578 - SecvEgale2


n = int(input())
def validate_input(n, arr):
v = list(map(int, input().split()))
    if not 1 <= n <= 100000:
        return False
    if not all(0 <= x < 1000000000 for x in arr):
        return False
    return True
 
 
def longest_equal_seq(n, arr):
    if not validate_input(n, arr):
        print("Datele nu corespund restricțiilor impuse.")
        return
 
    count = 1
    max_count = 1
 
    for i in range(1, n):
        if arr[i] == arr[i - 1]:
            count += 1
        else:
            max_count = max(max_count, count)
            count = 1


# numărăm secvențele de elemente egale
    max_count = max(max_count, count)
count = 1
     print("Datele sunt introduse corect.")
for i in range(1, n):
    print(max_count)
     if v[i] != v[i-1]:
        count += 1


print(count)


     print("Secventa nu exista")
if __name__ == "__main__":
    n = int(input().strip())
    arr = list(map(int, input().strip().split()))
     longest_equal_seq(n, arr)




</syntaxhighlight>
</syntaxhighlight>
== Explicatie Rezolvare ==
arr -> vine de la lista
validate_input(n: int, arr: list[int]) -> bool: Această funcție primește doi parametri: numărul n și vectorul arr. Funcția verifică dacă numărul n respectă restricțiile impuse de problema (adica 1 ≤ n ≤ 100.000) și dacă toate elementele din vectorul arr sunt mai mici decât 1.000.000.000. Dacă restricțiile sunt respectate, funcția returnează True, altfel returnează False.
find_longest_equal_seq(n: int, arr: list[int]) -> None: Această funcție primește doi parametri: numărul n și vectorul arr. Funcția verifica dacă datele sunt introduse corect folosind funcția validate_input și, în caz afirmativ, găsește lungimea celei mai lungi secvențe a vectorului arr care conține elemente egale și afișează indicii capetelor acestei secvențe.
In if __name__ == "__main__"itim numărul n și vectorul arr folosind input de la utilizator. Apoi, apelăm funcția find_longest_equal_seq și afișăm rezultatul.

Latest revision as of 20:31, 14 May 2023

Sursa: 0578 - SecvEgale2


Cerinţa[edit]

Se dă un vector cu n elemente, numere naturale. Determinați câte secvențe ale vectorului au toate elementele egale.

Date de intrare[edit]

Programul citește de la tastatură numărul n, apoi cele n elemente ale vectorului.

Date de ieșire[edit]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou va afișa pe ecran indicii st dr ai capetelor secvenței determinate, separați printr-un spațiu, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări[edit]

  • 1 ≤ n ≤ 100.000
  • elementele vectorului vor fi mai mici decât 1.000.000.000

Exemplu 1[edit]

Intrare
5
4 3 3 3 5
Ieșire
Datele sunt introduse corect.
8

Exemplu 2[edit]

Intrare
5
4 3 3 3 5
Ieșire
Datele nu corespund restrictiilor inpuse.


Rezolvare[edit]

Rezolvare ver. 1[edit]

<syntaxhighlight lang="python" line>

  1. 0578 - SecvEgale2

def validate_input(n, arr):

   if not 1 <= n <= 100000:
       return False
   if not all(0 <= x < 1000000000 for x in arr):
       return False
   return True


def longest_equal_seq(n, arr):

   if not validate_input(n, arr):
       print("Datele nu corespund restricțiilor impuse.")
       return
   count = 1
   max_count = 1
   for i in range(1, n):
       if arr[i] == arr[i - 1]:
           count += 1
       else:
           max_count = max(max_count, count)
           count = 1
   max_count = max(max_count, count)
   print("Datele sunt introduse corect.")
   print(max_count)


if __name__ == "__main__":

   n = int(input().strip())
   arr = list(map(int, input().strip().split()))
   longest_equal_seq(n, arr)


</syntaxhighlight>

Explicatie Rezolvare[edit]

arr -> vine de la lista

validate_input(n: int, arr: list[int]) -> bool: Această funcție primește doi parametri: numărul n și vectorul arr. Funcția verifică dacă numărul n respectă restricțiile impuse de problema (adica 1 ≤ n ≤ 100.000) și dacă toate elementele din vectorul arr sunt mai mici decât 1.000.000.000. Dacă restricțiile sunt respectate, funcția returnează True, altfel returnează False.

find_longest_equal_seq(n: int, arr: list[int]) -> None: Această funcție primește doi parametri: numărul n și vectorul arr. Funcția verifica dacă datele sunt introduse corect folosind funcția validate_input și, în caz afirmativ, găsește lungimea celei mai lungi secvențe a vectorului arr care conține elemente egale și afișează indicii capetelor acestei secvențe.

In if __name__ == "__main__"itim numărul n și vectorul arr folosind input de la utilizator. Apoi, apelăm funcția find_longest_equal_seq și afișăm rezultatul.