2908 - Planta
Enunț
Ghiță a primit de ziua lui o plantă exotică, ce se comportă foarte ciudat. El a măsurat-o când a primit-o și a constatat că are D cm, apoi a văzut că se dezvoltă într-un ritm special:
- În prima zi, planta crește cu A cm
- În a doua zi, descrește cu B cm
- În a treia zi, iar crește cu A cm
- În a patra zi, descrește din nou cu B cm
- etc.
Pe scurt, în zilele cu număr de ordine impar crește cu A cm, iar în cele cu număr de ordine par, descrește cu B cm.
Cerință
Știind D, înalțimea inițiala a plantei și valorile A și B cu care aceasta crește, respectiv descrește, să se afla ce înălțime va avea planta lui Ghiță la finalul celei de-a N -a zile.
Date de intrare
Pe prima linie a fișierului planta.in se vor afla patru numere naturale D A B N în aceasta ordine, separate prin câte un spațiu, cu semnificațiile din enunț.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Pe prima linie a fișierului planta.out se va afla un număr H, semnificând înălțimea finală a plantei în cm la finalul celei de-a N -a zile. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
Restricții și precizări
- 0 ≤ D ≤ 100
- 1 ≤ B ≤ A ≤ 1 000 000
- 1 ≤ N ≤ 1 000 000 000
- Pentru 50% dintre teste, 1 ≤ N ≤ 1 000 000
- Se garantează că pentru toate testele valorile se încadrează în tipul int.
Exemplul 1
- planta.in
4 5 2 3
- planta.out
12
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
Explicatie
- Dupa prima zi: H = 4 + 5 = 9
- Dupa a doua zi: H = 9 – 2 = 7
- Dupa a treia zi: H = 7 + 5 = 12
- Deci la finalul celei de-a 3-a zile, inaltimea plantei o sa fie 12 cm .
Exemplul 2
- planta.in
57 1000 1000 120
- planta.out
57
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line="1" start="1">
def validate_input(d, a, b, n):
if not (0 <= d <= 100): return False if not (1 <= b <= a <= 1000000): return False if not (1 <= n <= 1000000000): return False return True
def final_height(d, a, b, n):
height = d for i in range(1, n+1): if i % 2 == 1: height += a else: height -= b if height < 0: height = 0 return height
if __name__ == '__main__':
with open('planta.in', 'r') as f_in: d, a, b, n = map(int, f_in.readline().strip().split()) if not validate_input(d, a, b, n): print('Input invalid') else: height = final_height(d, a, b, n) with open('planta.out', 'w') as f_out: f_out.write(str(height))
</syntaxhighlight>
Explicatie
Funcția validate_input verifică dacă valorile citite din fișier respectă restricțiile din enunț, iar funcția final_height calculează înălțimea finală a plantei prin simularea creșterii/descreșterii într-o buclă for.
În blocul main se deschide fișierul de intrare, se citesc valorile și se validează inputul. Dacă inputul este valid, se calculează înălțimea finală a plantei și se scrie rezultatul în fișierul de ieșire. Dacă inputul nu este valid, se afișează un mesaj corespunzător.