3383 - Cif Max Min1

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

Programul va afișa pe ecran, mesajul "Datele introduse corespund cerințelor" și pe o linie nouă numărul P , reprezentând produsul primelor n pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua 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
3


Exemplul 2

Intrare
16
Ieșire
Datele introduse nu corespund cerințelor.


Exemplul 3

Intrare
7
Ieșire
Datele corespund cerințelor.
25401600


Rezolvare

#3383
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("Numărul de pachete trebuie să fie între 1 și 1000.")
        return False
    if not all(1 <= v < 1000000000 for v in volumes):
        print("Volumele pachetelor trebuie să fie mai mici decât 1.000.000.000.")
        return False
    if not (1 <= C < 1000000000):
        print("Capacitatea camionului trebuie să fie mai mică decât 1.000.000.000.")
        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(count_containers(volumes, C))