0862 - NrSecvente: Difference between revisions
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/520/secventa2 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 == Programul va afișa pe ecran valoarea cerută C. == Restricţii şi... |
No edit summary |
||
Line 22: | Line 22: | ||
# 0862 - NrSecvente | # 0862 - NrSecvente | ||
n | def citire_date(): | ||
n = int(input()) | |||
x = list(map(int, input().split())) | |||
t, k = map(int, input().split()) | |||
return x, t, k | |||
print( | def numar_secvente(x, t, k): | ||
counter = 0 | |||
for i in range(n-k+1): | |||
secventa = x[i:i+k] | |||
if all(e <= t for e in secventa): | |||
counter += 1 | |||
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) | |||
validare(int(input()), rezultat_obtinut) | |||
</syntaxhighlight> | </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ă. |
Revision as of 19:50, 17 April 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
Programul va afișa pe ecran valoarea cerută C.
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
- 3
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):
counter = 0 for i in range(n-k+1): secventa = x[i:i+k] if all(e <= t for e in secventa): counter += 1 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) 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ă.