0860 - Pachete1

De la Universitas MediaWiki

Sursa: [1]

Cerinţa

e poarta unei fabrici ies în ordine n pachete fiecare având un volum cunoscut. Pachetele sunt transportate folosind camioane. Toate camioanele au aceeași capacitate C, iar procedura este următoarea: fiecare pachet scos din fabrică este imediat încărcat într-un camion, și nu este posibil ca la încărcare să fie mai mult de un camion.

Determinați numărul minim de camioane necesar pentru a transporta cele n pachete.

Date de intrare

Programul citește de la tastatură numerele n C, iar apoi n numere naturale, reprezentând volumele pachetelor.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele introduse corespund cerintelor.", apoi pe un rand nou programul va afișa pe ecran numărul minim de camioane necesare M. În caz contrar, se va afișa mesajul:" Datele introduse nu corespund cerintelor."

Restricţii şi precizări

  • 1 ⩽ n ⩽ 1000
  • volumele pachetelor și capacitatea camioanelor vor fi mai mici decât 1.000.000.000.

Exemplul 1

Intrare
Pachete si capacitate: 5 4
Volume: 2 1 3 1 3
Ieșire
Datele introduse corespund cerintelor.
3


Exemplul 2

Intrare
Pachete si capacitate: 0 0
Volume: 0 0 3 4 5
Ieșire
Datele introduse nu corespund cerintelor.


Rezolvare

#0860
def count_containers(volumes, C):
    volumes.sort(reverse=True)
    count = 0
    current = C
    for volume in volumes:
        if volume <= current:
            current -= volume
        else:
            count += 1
            current = C - volume
    if current < C:
        count += 1
    return count


def validate_input(n, C, volumes):
    if not (1 <= n <= 1000):
        print("Datele introduse nu corespund cerintelor.")
        return False
    if not all(1 <= v < 1000000000 for v in volumes):
        print("Datele introduse nu corespund cerintelor.")
        return False
    if not (1 <= C < 1000000000):
        print("Datele introduse nu corespund cerintelor.")
        return False
    return True


if __name__ == '__main__':
    n, C = map(int, input("Pachete si capacitate: ").split())
    volumes = list(map(int, input("Volume: ").split()))

    if validate_input(n, C, volumes):
        print(f"Datele introduse corespund cerintelor.\n{count_containers(volumes, C)}")

Explicatie rezolvare

Acest program este scris în limbajul de programare Python și este format din două funcții și o secțiune principală de cod.

Funcția `count_containers` primește două argumente: o listă de volume și o capacitate maximă `C`. Scopul funcției este de a determina numărul minim de containere necesare pentru a stoca toate volumele din listă, astfel încât niciun container să nu depășească capacitatea maximă `C`. Funcția sortează lista de volume în ordine descrescătoare și parcurge elementele în ordine, adăugând un nou container ori de câte ori nu mai poate fi adăugat un element la containerul curent.

Funcția `validate_input` primește trei argumente: numărul de pachete, capacitatea maximă a containerelor și o listă de volume. Scopul acestei funcții este de a valida datele de intrare, verificând dacă toate valorile se încadrează în limitele specificate.

În secțiunea principală a codului, utilizatorul este întâmpinat cu un mesaj de intrare și i se cere să introducă numărul de pachete și capacitatea maximă a containerelor. Apoi, utilizatorul este rugat să introducă volumele pachetelor. Datele de intrare sunt validate folosind funcția `validate_input`, iar dacă acestea sunt corecte, funcția `count_containers` este apelată pentru a determina numărul minim de containere necesare și acesta este afișat pe ecran.