0862 - NrSecvente: Difference between revisions
No edit summary |
No edit summary |
||
Line 7: | Line 7: | ||
== Date de ieșire == | == Date de ieșire == | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: | Dacă datele sunt introduse corect, pe ecran se va afișa: | ||
'''"Datele sunt introduse corect."''', apoi pe un rând nou '''numărul | '''"Datele sunt introduse corect."''', apoi pe un rând nou '''va afișa pe ecran numărul C, reprezentând valoarea cerută''', 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 | ||
Line 15: | Line 15: | ||
: 8 5 3 | : 8 5 3 | ||
: 1 4 3 5 7 3 4 2 | : 1 4 3 5 7 3 4 2 | ||
; Ieșire | |||
: Datele sunt introduse corect. | |||
: 3 | |||
== Exemplu == | |||
; Intrare | |||
: 8 5 3 2 | |||
: 1 3 6 8 2 1 4 5 | |||
; Ieșire | ; Ieșire | ||
: Datele nu corespund restricțiilor impuse. | : Datele nu corespund restricțiilor impuse. | ||
: | : 7 | ||
== Rezolvare == | == Rezolvare == |
Revision as of 07:20, 3 May 2023
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 va afișa pe ecran numărul C, reprezentând valoarea cerută, 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 sunt introduse corect.
- 3
Exemplu
- Intrare
- 8 5 3 2
- 1 3 6 8 2 1 4 5
- Ieșire
- Datele nu corespund restricțiilor impuse.
- 7
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line>
- 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)
</syntaxhighlight>
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ă.