2908 - Planta: Difference between revisions
Vardai Erwin (talk | contribs) |
Vardai Erwin (talk | contribs) |
||
Line 61: | Line 61: | ||
===Rezolvare ver. 1=== | ===Rezolvare ver. 1=== | ||
<syntaxhighlight lang="python" line="1" start="1"> | <syntaxhighlight lang="python" line="1" start="1"> | ||
def validate_input(d, a, b, n): | def validate_input(d, a, b, n): | ||
if not (0 <= d <= 100): | if not (0 <= d <= 100): | ||
Line 70: | Line 69: | ||
return False | return False | ||
return True | return True | ||
def final_height(d, a, b, n): | def final_height(d, a, b, n): | ||
height = d | height = d | ||
for i in range(1, n+1): | for i in range(1, n + 1): | ||
if i % 2 == 1: | if i % 2 == 1: | ||
height += a | height += a | ||
Line 81: | Line 81: | ||
height = 0 | height = 0 | ||
return height | return height | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
Line 86: | Line 87: | ||
d, a, b, n = map(int, f_in.readline().strip().split()) | d, a, b, n = map(int, f_in.readline().strip().split()) | ||
if not validate_input(d, a, b, n): | if not validate_input(d, a, b, n): | ||
print(' | print('Datele de intrare nu corespund restricțiilor impuse.') | ||
else: | else: | ||
print("Datele de intrare corespund restricțiilor impuse.") | |||
height = final_height(d, a, b, n) | height = final_height(d, a, b, n) | ||
with open('planta.out', 'w') as f_out: | with open('planta.out', 'w') as f_out: | ||
Line 94: | Line 96: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicatie== | ==Explicatie== |
Revision as of 16:59, 7 May 2023
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
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
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('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))
</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.