2908 - Planta

De la Universitas 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.

Explicație

  • 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
Ieșire
Datele de intrare corespund restricțiilor impuse.

Rezolvare

Rezolvare ver. 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('Datele de intrare nu corespund restricțiilor impuse.')
        else:
            print("Datele de intrare corespund restricțiilor impuse.")
            height = final_height(d, a, b, n)
            with open('planta.out', 'w') as f_out:
                f_out.write(str(height))

Explicație

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.