4148 - Secv10: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4148/secv10 4148 - Secv10] ---- == Cerinţa == Se dau n numere naturale, reprezentând elementele unui vector. Determinați lungimea maximă a unei secvențe de elemente divizibile cu 10, precum și numărul de secvențe de lungime maximă cu elemente divizibile cu 10. == Date de intrare == Fișierul de intrare secv10.in conține numărul n și n valori naturale, reprezentând elementele vectorului. == Date de ieșire == Fișierul de...
 
Flaviu (talk | contribs)
No edit summary
Line 8: Line 8:


== Date de ieșire ==  
== Date de ieșire ==  
Fișierul de ieșire secv10.out va conține pe prima linie numerele lmax și c, reprezentând lungimea maximă a unei secvențe de elemente divizibile cu 10, respectiv numărul de secvențe de lungime maximă cu elemente divizibile cu 10.
Fișierul de ieșire secv10.out va conține:
Dacă datele sunt introduse corect, pe ecran se va afișa:
'''"Datele sunt introduse corect."''', apoi pe un rând nou '''numărul c''', 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 ==
* 0 < n ≤ 10.000
* 0 < n ≤ 10.000
Line 17: Line 19:
: 12 10 20 30 99 1000 1 20 500 600 5
: 12 10 20 30 99 1000 1 20 500 600 5
; Ieșire
; Ieșire
: Datele nu corespund restricțiilor impuse./
: Datele sunt introduse corect.
: 3 2
: 3 2


Line 24: Line 28:
# 4148 - Secv10
# 4148 - Secv10


with open("secv10.in") as f:
def secvmax(n, v):
     n = int(f.readline())
     lungime_max = 0
    v = list(map(int, f.read().split()))
    nr_max = 0
    lungime_curenta = 0
   
    for i in range(n):
        if v[i] % 10 == 0:
            lungime_curenta += 1
            if lungime_curenta > lungime_max:
                lungime_max = lungime_curenta
                nr_max = 1
            elif lungime_curenta == lungime_max:
                nr_max += 1
        else:
            lungime_curenta = 0
   
    return lungime_max, nr_max


max_len = 0
def validare(n, v):
count = 0
    if len(v) != n:
current_len = 0
        return False
    for x in v:
        if x % 10 != 0 or x < 0 or x > 1000000:
            return False
    return True


for i in range(n):
if __name__ == '__main__':
     if v[i] % 10 == 0:
    n, v = citire_date()
         current_len += 1
     if validare(n, v):
         lungime, nr = secvmax(n, v)
        print("Datele sunt introduse corect.")
        print(lungime, nr)
     else:
     else:
         current_len = 0
         print("Datele nu corespund restricțiilor impuse.")
 
    if current_len >= max_len:
        if current_len > max_len:
            max_len = current_len
            count = 1
        else:
            count += 1
 
with open("secv10.out", "w") as f:
    f.write(str(max_len) + " " + str(count) + "\n")
 






</syntaxhighlight>
</syntaxhighlight>

Revision as of 18:33, 27 April 2023

Sursa: 4148 - Secv10


Cerinţa

Se dau n numere naturale, reprezentând elementele unui vector. Determinați lungimea maximă a unei secvențe de elemente divizibile cu 10, precum și numărul de secvențe de lungime maximă cu elemente divizibile cu 10.

Date de intrare

Fișierul de intrare secv10.in conține numărul n și n valori naturale, reprezentând elementele vectorului.

Date de ieșire

Fișierul de ieșire secv10.out va conține: Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou numărul c, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 0 < n ≤ 10.000
  • elementele vectorului vor fi mai mici decât 1.000.000 și există cel puțin un element divizibil cu 10.

Exemplu

Intrare
11
12 10 20 30 99 1000 1 20 500 600 5
Ieșire
Datele nu corespund restricțiilor impuse./
Datele sunt introduse corect.
3 2

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line>

  1. 4148 - Secv10

def secvmax(n, v):

   lungime_max = 0
   nr_max = 0
   lungime_curenta = 0
   
   for i in range(n):
       if v[i] % 10 == 0:
           lungime_curenta += 1
           if lungime_curenta > lungime_max:
               lungime_max = lungime_curenta
               nr_max = 1
           elif lungime_curenta == lungime_max:
               nr_max += 1
       else:
           lungime_curenta = 0
   
   return lungime_max, nr_max

def validare(n, v):

   if len(v) != n:
       return False
   for x in v:
       if x % 10 != 0 or x < 0 or x > 1000000:
           return False
   return True

if __name__ == '__main__':

   n, v = citire_date()
   if validare(n, v):
       lungime, nr = secvmax(n, v)
       print("Datele sunt introduse corect.")
       print(lungime, nr)
   else:
       print("Datele nu corespund restricțiilor impuse.")


</syntaxhighlight>