0860 - Pachete1: Diferență între versiuni
(Pagină nouă: 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 pentr...) |
(Nicio diferență)
|
Versiunea de la data 26 martie 2023 10:10
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
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
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.
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("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))