2459 - Low Memory
Cerința
Ajutaţi-l pe Bogdan să ducă la bun sfârşit sarcina primită de la tatăl său pentru a se putea întâlni cu Marcela, fata din vecini.
Date de intrare
Fișierul de intrare low_memory.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale ordonate crescător.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.", fișierul de ieșire low_memory.out va conține pe prima linie numerele din fişierul de intrare în ordine descrescătoare. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".
Restricții și precizări
21 ≤ n ≤ 3000numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 10^13.
Exemple
Exemplul 1
- low_memory.in
- 7
- 1 2 5 7 8 9 12
- ecran
- Datele sunt introduse corect.
- low_memory.out
- 12 9 8 7 5 2 1
Exemplul 2
- low_memory.in
- 5
- 1 2 3 4 5
- ecran
- Datele sunt introduse corect.
- low_memory.out
- 5 4 3 2 1
Exemplul 3
- low_memory.in
- 3
- 1 2 3 10000000000000
- ecran
- Datele nu corespund restricțiilor impuse.
- low_memory.out
Rezolvare
<syntaxhighlight lang="python" line="1">
- 2459 - Low Memory
from typing import List import sys
def validate_input(n: int, a: List[int]) -> bool:
# Verifică dacă n este un număr pozitiv și a are o lungime corespunzătoare # și dacă toate elementele din a sunt mai mici decât 10^13 return n > 0 and len(a) == n and all(x < 10**13 for x in a)
def solve(n: int, a: List[int]) -> List[int]:
# Inversează elementele listei return a[::-1]
def main() -> None:
# Citire date de intrare try: with open("low_memory.in", "r") as fin: n = int(fin.readline().strip()) a = list(map(int, fin.readline().split())) except FileNotFoundError: print("Nu s-a putut deschide fisierul de intrare.") sys.exit(0)
# Verificare date de intrare if not validate_input(n, a): print("Datele nu corespund restricțiilor impuse.") sys.exit(0)
# Rezolvare și afișare result = solve(n, a) print("Datele sunt introduse corect.") try: with open("low_memory.out", "w") as fout: fout.write(" ".join(map(str, result))) except: sys.exit(0)
main()
Explicatie Funcția validate_input(n: int, a: List[int]) -> bool verifică dacă datele de intrare respectă restricțiile impuse de cerință. În cazul nostru, această funcție verifică dacă n este un număr pozitiv, dacă lungimea listei a este egală cu n și dacă toate elementele din lista a sunt mai mici decât 10^13. Funcția returnează True dacă datele de intrare sunt valide și False în caz contrar.
Funcția solve(n: int, a: List[int]) -> List[int] primește numărul n și lista de numere naturale a și returnează o nouă listă care conține elementele lui a în ordine inversă.
Funcția main() -> None este punctul de intrare în program și conține codul principal. În această funcție, datele de intrare sunt citite din fișierul "low_memory.in", apoi sunt validate folosind funcția validate_input. În cazul în care datele de intrare sunt invalide, programul afișează un mesaj de eroare și se încheie cu ajutorul funcției sys.exit(0). În caz contrar, programul continuă cu inversarea listei folosind funcția solve, scrie rezultatul în fișierul "low_memory.out" și afișează mesajul "Datele sunt introduse corect.".
În final, programul rulează funcția main().
</syntaxhighlight>