3739 - Cafea: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerința == Într-o cafenea, un barista trebuie să pregătească diverse tipuri de cafea pentru clienți. Fiecare comandă de cafea are un anumit timp de preparare, iar barista dorește să minimizeze timpul total de așteptare al clienților. Sarcina ta este să implementezi un program care să determine ordinea optimă în care barista trebuie să prepare comenzile pentru a minimiza timpul total de așteptare utilizând o metodă greedy. == Date de intrare == Programul...)
(Nicio diferență)

Versiunea de la data 2 iunie 2024 18:57

Cerința

Într-o cafenea, un barista trebuie să pregătească diverse tipuri de cafea pentru clienți. Fiecare comandă de cafea are un anumit timp de preparare, iar barista dorește să minimizeze timpul total de așteptare al clienților. Sarcina ta este să implementezi un program care să determine ordinea optimă în care barista trebuie să prepare comenzile pentru a minimiza timpul total de așteptare utilizând o metodă greedy.

Date de intrare

Programul citește de la tastatură:

Un număr întreg n reprezentând numărul de comenzi. O listă de n numere întregi reprezentând timpul de preparare pentru fiecare comandă.

Date de ieșire

Pe ecran se va afișa timpul total minim de așteptare al clienților.

Restricții și precizări

  • 1 ⩽ n ⩽ 100
  • Timpul de preparare pentru fiecare comandă este un număr întreg pozitiv

Exemplu 1

Intrare

4
3 1 4 3

Iesire

23

Exemplu 2

Intrare

3
2 5 1

Iesire

12

Rezolvare

def citeste_date():
    try:
        n = int(input("Introduceți numărul de comenzi (n): "))
        timpuri = list(map(int, input("Introduceți timpii de preparare, separați prin spațiu: ").split()))
        return n, timpuri
    except ValueError:
        return None, None

def valideaza_date(n, timpuri):
    if not (1 <= n <= 100):
        return False
    if len(timpuri) != n:
        return False
    if not all(isinstance(timp, int) and timp > 0 for timp in timpuri):
        return False
    return True

def calculeaza_timp_minim_asteptare(n, timpuri):
    timpuri.sort()
    timp_asteptare_total = 0
    timp_cumulat = 0

    for timp in timpuri:
        timp_cumulat += timp
        timp_asteptare_total += timp_cumulat

    return timp_asteptare_total

def main():
    n, timpuri = citeste_date()
    
    if n is None or timpuri is None or not valideaza_date(n, timpuri):
        print("Datele de intrare nu corespund restricțiilor impuse.")
        return
    
    print("Datele de intrare corespund restricțiilor impuse.")
    timp_minim_asteptare = calculeaza_timp_minim_asteptare(n, timpuri)
    print(timp_minim_asteptare)

if __name__ == "__main__":
    main()