2908 - Planta

From Bitnami MediaWiki

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.