0091 - Masini

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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 

masiniOUT.txt

Eroare: Nu corespunde restricțiilor   

Rezolvare

import os

def numar_maxim_masini(n, T, timp_reparare):
    timp_reparare.sort()

    masini_reparate = 0
    timp_total = 0

    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:
        n, T = map(int, f.readline().split())

        if not (1 <= n <= 1000 and 1 <= T <= 1000):
            raise ValueError("Nu corespunde restricțiilor")

        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

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:
    with open("masiniOUT.txt", "w", encoding="utf-8") as f_out:
        f_out.write(f"Eroare: {str(e)}")
    exit(1)

rezultat = numar_maxim_masini(n, T, timp_reparare)

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