0578 - SecvEgale2: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
No edit summary
Flaviu (talk | contribs)
No edit summary
 
(6 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


def read_input():
def validate_input(n, arr):
     n = int(input())
     if not 1 <= n <= 100000:
     v = list(map(int, input().split()))
        return False
     return v
    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


def count_equal_sequences(v):
     for i in range(1, n):
    cnt = 0
         if arr[i] == arr[i - 1]:
    last = None
             count += 1
    seq_len = 0
   
     for i in range(len(v)):
         if v[i] != last:
             if seq_len >= 2:
                cnt += 1
            seq_len = 1
            last = v[i]
         else:
         else:
             seq_len += 1
             max_count = max(max_count, count)
           
            count = 1
     if seq_len >= 2:
 
        cnt += 1
     max_count = max(max_count, count)
       
    print("Datele sunt introduse corect.")
     return cnt
     print(max_count)


def validate_output(expected, actual):
    return expected == actual


if __name__ == '__main__':
if __name__ == "__main__":
     v = read_input()
     n = int(input().strip())
    result = count_equal_sequences(v)
     arr = list(map(int, input().strip().split()))
     expected = int(input())
     longest_equal_seq(n, arr)
    if validate_output(expected, result):
        print("Corect")
     else:
        print("Incorect")




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

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

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

Date de ieșire[edit | edit source]

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

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

Exemplu 1[edit | edit source]

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

Exemplu 2[edit | edit source]

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


Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

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

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.