0562 - Fast Food: Difference between revisions
Pagină nouă: == Cerinţa == Fast-food-ul de la colțul străzii are '''n''' clienți. Pentru fiecare client se cunoaște momentul în care intră în fast-food și momentul în care iese, ambele fiind exprimate în minute, numărate de la începutul perioadei de funcționare. Gigel, patronul acestui fast-food, dorește să afle perioada totală în care în local nu a fost nici un client, știind că acesta se deschide la momentul '''t1''' și se închide la momentul '''t2'''. == Date de... |
No edit summary |
||
Line 9: | Line 9: | ||
* 1 ⩽ t1 ⩽ t2 ⩽ 10.000 | * 1 ⩽ t1 ⩽ t2 ⩽ 10.000 | ||
* pentru fiecare client, t1 ⩽ x ⩽ y ⩽ t2 | * pentru fiecare client, t1 ⩽ x ⩽ y ⩽ t2 | ||
== Exemplu == | == Exemplu 1== | ||
; Intrare | ; Intrare | ||
5 2 15 | |||
5 7 | |||
10 11 | |||
10 13 | |||
5 6 | |||
7 9 | |||
; Ieșire | ; Ieșire | ||
Datele de intrare corespund restrictiilor impuse | |||
6 | |||
== Exemplu 2== | |||
; Intrare | |||
3 2 10000 | |||
3 2 | |||
31 1 | |||
4 2 | |||
; Iesire | |||
Datele de intrare nu corespund restrictiilor impuse | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | def validare(n, t1, t2, clienti): | ||
if not n.isdigit() or int(n) < 1 or int(n) > 1000: | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
return False | |||
if not t1.isdigit() or int(t1) < 1 or int(t1) >= int(t2) or int(t1) > 10000: | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
return False | |||
if not t2.isdigit() or int(t2) <= int(t1) or int(t2) > 10000: | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
return False | |||
for c in clienti: | |||
if len(c) != 2 or any(not val.isdigit() or int(val) < int(t1) or int(val) > int(t2) for val in c): | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
return False | |||
print("Datele de intrare corespund restrictiilor impuse") | |||
return True | |||
def main(): | |||
# Solicităm introducerea numerelor n, t1 și t2 | |||
print("Introduceți numărul de clienți și momentul deschiderii și închiderii, separate printr-un spațiu: ") | |||
n, t1, t2 = input().split() | |||
# Citim momentul intrării și ieșirii fiecărui client | |||
print("Introduceți momentul intrării și ieșirii fiecărui client, separate printr-un spațiu: ") | |||
clienti = [input().split() for _ in range(int(n))] | |||
if not validare(n, t1, t2, clienti): # apelul functiei de validare | |||
return | |||
n, t1, t2 = int(n), int(t1), int(t2) | |||
clienti = [[int(val) for val in c] for c in clienti] | |||
# Inițializăm o listă de lungimea perioadei de funcționare a localului | # Inițializăm o listă de lungimea perioadei de funcționare a localului | ||
timp = [0] * (t2 + 1) | timp = [0] * (t2 + 1) | ||
Line 30: | Line 75: | ||
timp[j] = 1 | timp[j] = 1 | ||
# Returnăm numărul de minute în care nu a fost niciun client | # Returnăm numărul de minute în care nu a fost niciun client | ||
print("Perioada totală în care în local nu a fost nici un client: ", timp[t1:t2].count(0)) | |||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 14:20, 12 December 2023
Cerinţa[edit | edit source]
Fast-food-ul de la colțul străzii are n clienți. Pentru fiecare client se cunoaște momentul în care intră în fast-food și momentul în care iese, ambele fiind exprimate în minute, numărate de la începutul perioadei de funcționare. Gigel, patronul acestui fast-food, dorește să afle perioada totală în care în local nu a fost nici un client, știind că acesta se deschide la momentul t1 și se închide la momentul t2.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele n t1 t2, iar apoi n perechi de numere naturale x y , reprezentând momentul intrării, respectiv momentul ieșirii fiecărui client din restaurant.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul P, reprezentând valoarea cerută.
Restricţii şi precizări[edit | edit source]
- 1 ⩽ n ⩽ 1000
- 1 ⩽ t1 ⩽ t2 ⩽ 10.000
- pentru fiecare client, t1 ⩽ x ⩽ y ⩽ t2
Exemplu 1[edit | edit source]
- Intrare
5 2 15 5 7 10 11 10 13 5 6 7 9
- Ieșire
Datele de intrare corespund restrictiilor impuse 6
Exemplu 2[edit | edit source]
- Intrare
3 2 10000 3 2 31 1 4 2
- Iesire
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def validare(n, t1, t2, clienti):
if not n.isdigit() or int(n) < 1 or int(n) > 1000: print("Datele de intrare nu corespund restrictiilor impuse") return False
if not t1.isdigit() or int(t1) < 1 or int(t1) >= int(t2) or int(t1) > 10000: print("Datele de intrare nu corespund restrictiilor impuse") return False
if not t2.isdigit() or int(t2) <= int(t1) or int(t2) > 10000: print("Datele de intrare nu corespund restrictiilor impuse") return False
for c in clienti: if len(c) != 2 or any(not val.isdigit() or int(val) < int(t1) or int(val) > int(t2) for val in c): print("Datele de intrare nu corespund restrictiilor impuse") return False
print("Datele de intrare corespund restrictiilor impuse") return True
def main():
# Solicităm introducerea numerelor n, t1 și t2 print("Introduceți numărul de clienți și momentul deschiderii și închiderii, separate printr-un spațiu: ") n, t1, t2 = input().split()
# Citim momentul intrării și ieșirii fiecărui client print("Introduceți momentul intrării și ieșirii fiecărui client, separate printr-un spațiu: ") clienti = [input().split() for _ in range(int(n))]
if not validare(n, t1, t2, clienti): # apelul functiei de validare return
n, t1, t2 = int(n), int(t1), int(t2) clienti = [[int(val) for val in c] for c in clienti]
# Inițializăm o listă de lungimea perioadei de funcționare a localului timp = [0] * (t2 + 1) # Pentru fiecare client for i in range(n): # Marcăm minutele în care acesta se află în local cu 1 for j in range(clienti[i][0], clienti[i][1]): timp[j] = 1 # Returnăm numărul de minute în care nu a fost niciun client print("Perioada totală în care în local nu a fost nici un client: ", timp[t1:t2].count(0))
if __name__ == "__main__":
main()
</syntaxhighlight>
Explicatie[edit | edit source]
Intervalele în care nu este nici un client în fast-food sunt: 2-5, 9-10, 13-15.