0091 - Masini

De la Universitas MediaWiki
Versiunea din 4 decembrie 2023 22:54, autor: Gabii (discuție | contribuții) (Pagină nouă: == Enunț == În curtea unui atelier de reparaţii auto, sunt <code>n</code> maşini care trebuie sa fie reparate. Deoarece nu sunt suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină. = Cerinţa = Cunoscând timpul necesar pentru repararea fiecărei maşini, scrieţi un program care calculează numărul maxim de maşini care pot fi reparate într-un interval de timp <code>T</code>. = Date de intrare = Pe prima linie a fişierului <co...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Enunț

În curtea unui atelier de reparaţii auto, sunt n maşini care trebuie sa fie reparate. Deoarece nu sunt suficienţi mecanici, în fiecare moment de timp se poate lucra doar la o singură maşină.

Cerinţa

Cunoscând timpul necesar pentru repararea fiecărei maşini, scrieţi un program care calculează numărul maxim de maşini care pot fi reparate într-un interval de timp T.

Date de intrare

Pe prima linie a fişierului masiniIN.txt se găsesc două numere naturale n şi T separate printr-un singur spaţiu, reprezentând numărul de maşini din curtea atelierului auto şi timpul total în care se va lucra.

Pe linia a doua, separate prin câte un spaţiu, se găsesc n numere naturale t1, t2, …, tn, reprezentând timpii necesari pentru repararea fiecărei maşini.

Date de ieşire

Pe prima linie a fişierului masiniOUT.txtse va găsi un număr natural k, reprezentând numărul maxim de maşini care pot fi reparate.

Restricţii şi precizări

  • 1 < n, T <= 1000
  • numerele de pe a doua linie a fişierului de intrare vor fi mai mici sau egale cu 100

Exemplul 1

masiniIN.txt

5 10
6 2 4 8 2 

masiniOUT.txt

3

Exemplul 2

masiniIN.txt

5 10000
6 2 4 8 2 

consola

Eroare: Nu corespunde restricțiilor   

Rezolvare

import os

def numar_maxim_masini(n, T, timp_reparare):
    # Sortează timpurile de reparare în ordine crescătoare
    timp_reparare.sort()

    masini_reparate = 0
    timp_total = 0

    # Parcurge mașinile și adaugă timpul de reparare la timp_total
    for timp in timp_reparare:
        if timp_total + timp <= T:
            masini_reparate += 1
            timp_total += timp
        else:
            break

    return masini_reparate

def citeste_date_intrare(nume_fisier):
    if not os.path.exists(nume_fisier):
        raise FileNotFoundError(f"Fișierul {nume_fisier} nu a fost găsit.")

    with open(nume_fisier, "r") as f:
        # Citire n și T
        n, T = map(int, f.readline().split())

        # Verificare restricții pentru n și T
        if not (1 <= n <= 1000 and 1 <= T <= 1000):
            raise ValueError("Nu corespunde restricțiilor")

        # Citire și verificare timp_reparare
        timp_reparare = list(map(int, f.readline().split()))
        if any(timp > 100 for timp in timp_reparare):
            raise ValueError("Nu corespunde restricțiilor")

    return n, T, timp_reparare

# Citire date de intrare și verificare restricții
try:
    n, T, timp_reparare = citeste_date_intrare("masiniIN.txt")
except FileNotFoundError as e:
    print(f"Eroare: {str(e)}")
    exit(1)
except ValueError as e:
    print(f"Eroare: {str(e)}")
    exit(1)

# Calculare rezultat
rezultat = numar_maxim_masini(n, T, timp_reparare)

# Scriere rezultat în fișierul masiniOUT.txt
with open("masiniOUT.txt", "w") as f_out:
    f_out.write(str(rezultat))