0862 - NrSecvente: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Fără descriere a modificării
Linia 6: Linia 6:
Programul citește de la tastatură numerele n t k, iar apoi cele n elemente ale vectorului.
Programul citește de la tastatură numerele n t k, iar apoi cele n elemente ale vectorului.
== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran valoarea cerută C.
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 ==
* 1 ≤ k ≤ n ≤ 100.000
* 1 ≤ k ≤ n ≤ 100.000
Linia 15: Linia 16:
: 1 4 3 5 7 3 4 2
: 1 4 3 5 7 3 4 2
; Ieșire
; Ieșire
: Datele nu corespund restricțiilor impuse.
: 3
: 3


Linia 30: Linia 32:


def numar_secvente(x, t, k):
def numar_secvente(x, t, k):
    if k < 1 or k > len(x) or len(x) > 100000 or t >= 1000000000:
        print("Datele nu corespund restricțiilor impuse.")
        return None
     counter = 0
     counter = 0
     for i in range(n-k+1):
     for i in range(len(x)-k+1):
         secventa = x[i:i+k]
         secventa = x[i:i+k]
         if all(e <= t for e in secventa):
         if all(e <= t for e in secventa):
             counter += 1
             counter += 1
    print("Datele sunt introduse corect.")
     return counter
     return counter


Linia 48: Linia 54:
     x, t, k = citire_date()
     x, t, k = citire_date()
     rezultat_obtinut = numar_secvente(x, t, k)
     rezultat_obtinut = numar_secvente(x, t, k)
     validare(int(input()), rezultat_obtinut)
     if rezultat_obtinut is not None:
        validare(int(input()), rezultat_obtinut)





Versiunea de la data 27 aprilie 2023 18:02

Sursa: 0862 - NrSecvente


Cerinţa

Se dă un vector cu n elemente, numere naturale și două numere t și k. Să se determine câte secvențe din șir au lungimea k și sunt formate din valori mai mici sau egale cu t.

Date de intrare

Programul citește de la tastatură numerele n t k, iar apoi cele n elemente ale vectorului.

Date de ieșire

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

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

Exemplu

Intrare
8 5 3
1 4 3 5 7 3 4 2
Ieșire
Datele nu corespund restricțiilor impuse.
3

Rezolvare

Rezolvare ver. 1

# 0862 - NrSecvente

def citire_date():
    n = int(input())
    x = list(map(int, input().split()))
    t, k = map(int, input().split())
    return x, t, k


def numar_secvente(x, t, k):
    if k < 1 or k > len(x) or len(x) > 100000 or t >= 1000000000:
        print("Datele nu corespund restricțiilor impuse.")
        return None
    counter = 0
    for i in range(len(x)-k+1):
        secventa = x[i:i+k]
        if all(e <= t for e in secventa):
            counter += 1
    print("Datele sunt introduse corect.")
    return counter


def validare(expected, actual):
    if expected == actual:
        print("Corect")
    else:
        print(f"Incorect. Rezultatul corect era {expected}, dar am primit {actual}")


if __name__ == '__main__':
    x, t, k = citire_date()
    rezultat_obtinut = numar_secvente(x, t, k)
    if rezultat_obtinut is not None:
        validare(int(input()), rezultat_obtinut)

Explicatie Rezolvare

În funcția citire_date, citim de la tastatură cele n elemente ale vectorului și cele două numere t și k și le returnăm sub formă de tuplu.

În funcția numar_secvente, parcurgem vectorul și, pentru fiecare poziție, verificăm dacă următoarele k elemente formează o secvență cu elemente mai mici sau egale cu t. Dacă da, incrementăm counter-ul. La final, returnăm valoarea counter-ului.

În funcția validare, verificăm dacă valoarea returnată de funcția numar_secvente corespunde cu valoarea așteptată și returnăm un mesaj corespunzător.

În if __name__ == '__main__', apelăm funcțiile în ordinea cerută de problemă.