0562 - Fast Food: Difference between revisions

From Bitnami MediaWiki
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 2 15
: 5 7  
5 7  
: 10 11
10 11
: 10 13  
10 13  
: 5 6   
5 6   
: 7 9  
7 9  
; Ieșire
; Ieșire
: 6
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 timp_fara_clienti(n, t1, t2, clienti):
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
     return timp[t1:t2].count(0)
     print("Perioada totală în care în local nu a fost nici un client: ", timp[t1:t2].count(0))
 


if __name__ == "__main__":
if __name__ == "__main__":
     # Citim datele de intrare
     main()
    n = int(input("Numărul de clienți: "))
    t1 = int(input("Momentul deschiderii: "))
    t2 = int(input("Momentul închiderii: "))
    clienti = []
    for i in range(n):
        x = int(input("Momentul intrării clientului " + str(i+1) + ": "))
        y = int(input("Momentul ieșirii clientului " + str(i+1) + ": "))
        clienti.append((x, y))
 
    print("Perioada totală în care în local nu a fost nici un client: ", timp_fara_clienti(n, t1, t2, clienti))


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 14:20, 12 December 2023

Cerinţa[edit]

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]

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]

Programul va afișa pe ecran numărul P, reprezentând valoarea cerută.

Restricţii şi precizări[edit]

  • 1 ⩽ n ⩽ 1000
  • 1 ⩽ t1 ⩽ t2 ⩽ 10.000
  • pentru fiecare client, t1 ⩽ x ⩽ y ⩽ t2

Exemplu 1[edit]

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]

Intrare
3 2 10000
3 2
31 1
4 2
Iesire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare[edit]

<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]

Intervalele în care nu este nici un client în fast-food sunt: 2-5, 9-10, 13-15.