3383 - Cif Max Min1: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Dragos1234 (talk | contribs)
Ștergerea conținutului paginii
Tag: Blanking
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/860/pachete1]
== 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 ==
Acest program primește ca intrare un număr '''n''' și o capacitate '''C''', reprezentând numărul de pachete și capacitatea camionului, și o listă de n volume, reprezentând volumele fiecărei pachete. Programul calculează câte containere sunt necesare pentru a transporta toate pachetele, respectând capacitatea maximă a camionului. În cazul în care intrarea este invalidă, programul afișează un mesaj de eroare corespunzător.
Datele de ieșire ale programului sunt numărul de containere necesare pentru a transporta toate pachetele, sau un mesaj de eroare în cazul în care intrarea este invalidă.
== 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
<br>
== Exemplul 2 ==
; Intrare
: Pachete si capacitate: 0 0
: Volume: 0 0 3 4 5
; Ieșire
: Numărul de pachete trebuie să fie între 1 și 1000.
<br>
== Rezolvare ==
<syntaxhighlight lang="python" line>
#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))
</syntaxhighlight>

Revision as of 10:09, 26 March 2023