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