4298 - Lacom

De la Universitas MediaWiki

Context

Victor și tatăl său au mers la magazinul de bomboane pentru ca tatăl să își onoreze o mai veche promisiune. Magazinul are bomboanele aranjate pe un rând, în mai multe cutii așezate una lângă alta. Se cunoaște numărul de bomboane din fiecare cutie, în ordinea în care sunt așezate cutiile începând de la intrare. Tatăl i-a fixat lui Victor următoarea regulă de colectare a bomboanelor:

  • Parcurge cutiile începând de la intrare.
  • Colectează toate bomboanele din prima cutie.
  • Când ajunge la o cutie de pe rând, colectează toate bomboanele de acolo doar dacă numărul lor este strict mai mare decât numărul de bomboane din ultima cutie din care a colectat.

Cerinţa

Determinați câte bomboane a colectat Victor.

Date de intrare

Din fișierul lacom.in se citește mai întâi numărul de cutii, număr_cutii și apoi numărul de bomboane din fiecare cutie, în vectorul continut_cutii, în ordinea întâlnirii cutiilor pornind de la intrare.

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse.", iar în fișierul lacom.out se scrie numărul determinat. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, programul va afișa "Datele de intrare nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • numar_cutii ∈ ℕ
  • 1 ⩽ numar_cutii ⩽ 100
  • element continut_cutii ∈ ℕ
  • 1 ⩽ element continut_cutii < 1.000.000.000

Exemplu

Intrare (lacom.in)
7
5
3
9
7
8
10
1
Ieșire (Ecran)
Datele introduse corespund restricțiilor impuse.
Ieșire (lacom.out)
24


Intrare (lacom.in)
3
5
abc
63.5
Ieșire (Ecran)
Datele introduse nu corespund restricțiilor impuse.
Ieșire (lacom.out)


Intrare (lacom.in)
0
Ieșire (Ecran)
Datele introduse nu corespund restricțiilor impuse.
Ieșire (lacom.out)


Rezolvare

Rezolvare ver. 1

# 4298 - Lacom

def validare_date_numar_cutii(numar):
    if numar.isdigit():
        if 1 <= int(numar) <= 100:
            return True
        else:
            return False
    else:
        return False
    
    
def validare_date_continut_cutii(vector):
    return all(isinstance(element, (int)) and element >= 0 for element in vector)


def lacom(numar_cutii, continut_cutii):
    maxim_curent = continut_cutii[0]
    raspuns = maxim_curent
    
    for element in continut_cutii[1:]:
        if element > maxim_curent:
            maxim_curent = element
            raspuns += maxim_curent
            
    fisier_iesire.write(str(raspuns))
    
    
if __name__ == "__main__":
    fisier_intrare = open("lacom.in", "r")
    fisier_iesire = open("lacom.out", "w")
    
    linie1 = fisier_intrare.readline()
    numar_cutii = linie1[0]
    
    continut_cutii = []
    linie2 = fisier_intrare.readline().strip().split(" ")
    continut_cutii.extend([int(element) for element in linie2])
    
    if validare_date_numar_cutii and validare_date_continut_cutii(continut_cutii):
        numar_cutii = int(numar_cutii)
        print(numar_cutii, continut_cutii)
        print('Datele de intrare corespund restricțiilor impuse.')
        lacom(numar_cutii, continut_cutii)
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")