4148 - Secv10

De la Universitas MediaWiki

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

# 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.")