1187 - Roboti 1
Cerința
Într-o fabrică de roboți, aceștia trebuie să îndeplinească o serie de sarcini care au durate diferite. Fiecare robot poate îndeplini o singură sarcină la un moment dat, iar scopul este să se minimizeze timpul total de finalizare a tuturor sarcinilor. Sarcina ta este să implementezi un program care să determine ordinea optimă în care roboții trebuie să îndeplinească sarcinile pentru a minimiza timpul total de finalizare utilizând o metodă greedy.
Date de intrare
Programul citește de la tastatură:
Un număr întreg n reprezentând numărul de sarcini. O listă de n numere întregi reprezentând durata fiecărei sarcini.
Date de ieșire
Pe ecran se va afișa timpul total minim de finalizare a tuturor sarcinilor.
Restricții și precizări
- 1 ⩽ n ⩽ 100
- Durata fiecărei sarcini este un număr întreg pozitiv
Exemplu 1
- Intrare
4
3 1 4 3
- Iesire
23
Rezolvare
<syntaxhighlight lang="python" line> def citeste_date():
try: n = int(input("Introduceți numărul de sarcini (n): ")) durate = list(map(int, input("Introduceți duratele sarcinilor, separate prin spațiu: ").split())) return n, durate except ValueError: return None, None
def valideaza_date(n, durate):
if not (1 <= n <= 100): return False if len(durate) != n: return False if not all(isinstance(durata, int) and durata > 0 for durata in durate): return False return True
def calculeaza_timp_minim_total(n, durate):
durate.sort() timp_total = 0 timp_cumulat = 0
for durata in durate: timp_cumulat += durata timp_total += timp_cumulat
return timp_total
def main():
n, durate = citeste_date() if n is None or durate is None or not valideaza_date(n, durate): print("Datele de intrare nu corespund restricțiilor impuse.") return print("Datele de intrare corespund restricțiilor impuse.") timp_minim_total = calculeaza_timp_minim_total(n, durate) print(timp_minim_total)
if __name__ == "__main__":
main()
</syntaxhighlight>