Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
3024 - ou
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Sursa: [https://www.pbinfo.ro/probleme/3024/ou 3024 - ou] ---- == Cerinţa == Pe strada lui Dorel casele sunt aşezate doar de o parte a străzii. Cu ocazia sărbătorilor de Paşti, fiecare proprietar împarte ouă roşii vecinilor cei mai apropiaţi de casa lui. Se ştie că pe strada lui Dorel sunt n case, fiecare proprietar i are O[i] ouă, fiecare proprietar împarte ouă la un număr egal de case situate în stânga şi în dreapta lui, de asemenea fiecare vrea să împartă ouă la un număr maxim de case, un număr egal de ouă, cât mai mare, la fiecare casă. Dacă obiceiul de împărţire a ouălor are loc simultan, aflaţi câte ouă va avea fiecare la sfârşitul zilei. == Date de intrare == Fișierul de intrare ou.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații, reprezentând numărul ouălor din fiecare casă. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."''' ou.out pe prima linie n numere, reprezentând numărul ouălor avute de fiecare proprietar la sfârşitul zilei.''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''. == Restricţii şi precizări == * 3 ≤ n ≤ 100.000 * numerele de pe a doua linie a fișierului de intrare vor fi naturale nenule, mai mici decât 1.000.000.000 == Exemplu 1 == ; Intrare : ou.in : 5 : 13 2 7 44 5 ; Ieșire : Datele sunt introduse correct. : ou.out : 15 1 26 1 28 == Exemplu 2 == ; Intrare : ou.in : 5 : -13 2 72 44 -5 ; Ieșire : Datele nu corespund restricțiilor impuse. == Rezolvare == === Rezolvare ver. 1 === <syntaxhighlight lang="python" line> # 3024 - ou def calculate_eggs(n, eggs): if n < 3 or n > 100000: return None if any(egg <= 0 or egg >= 1000000000 for egg in eggs): return None result = [0] * n for i in range(1, n): result[i] += min(eggs[i], eggs[i - 1]) for i in range(n - 2, -1, -1): result[i] += min(eggs[i], eggs[i + 1]) return result def validate_input(n, eggs): if n < 3 or n > 100000: return False if any(egg <= 0 or egg >= 1000000000 for egg in eggs): return False return True if __name__ == "__main__": with open("ou.in", "r") as f: n = int(f.readline().strip()) eggs = list(map(int, f.readline().strip().split())) if not validate_input(n, eggs): print("Datele nu corespund restricțiilor impuse.") else: print("Datele sunt introduse corect.") result = calculate_eggs(n, eggs) # Scrierea rezultatului în fișierul de ieșire with open("ou.out", "w") as f: f.write(" ".join(str(egg) for egg in result)) </syntaxhighlight> == Explicatie Rezolvare == Pentru a rezolva această problemă, vom urma următorii pași: Funcția calculate_eggs(n, eggs): Această funcție primește numărul de case n și lista eggs cu numărul de ouă din fiecare casă. În primul rând, funcția verifică dacă valorile de intrare respectă restricțiile impuse: numărul de case trebuie să fie între 3 și 100.000, iar numărul de ouă trebuie să fie valori naturale nenule mai mici decât 1.000.000.000. Dacă valorile de intrare nu respectă restricțiile, funcția returnează None pentru a indica că datele sunt invalide. În caz contrar, funcția procedează la împărțirea ouălor între proprietarii de case. Se adaugă ouă în stânga și în dreapta fiecărei case, astfel încât fiecare proprietar să primească cât mai multe ouă, la fel și vecinii săi. Funcția returnează o listă cu numărul de ouă pe care îl va avea fiecare proprietar la sfârșitul zilei. Funcția validate_input(n, eggs): Această funcție verifică dacă datele de intrare respectă restricțiile impuse pentru numărul de case și numărul de ouă. Mai întâi, funcția verifică restricțiile pentru numărul de case: trebuie să fie între 3 și 100.000. Apoi, se verifică restricțiile pentru numărul de ouă: fiecare valoare trebuie să fie o valoare naturală nenulă mai mică decât 1.000.000.000. Funcția returnează True dacă datele de intrare sunt valide și respectă restricțiile, sau False în caz contrar. În blocul if __name__ == "__main__":: Citirea datelor de intrare se face din fișierul "ou.in" și se extrag valorile numărului de case și lista de ouă. Se verifică validitatea datelor de intrare folosind funcția validate_input. Dacă datele de intrare sunt invalide, se afișează un mesaj corespunzător. În caz contrar, se afișează un mesaj că datele sunt introduse corect. Se apelează funcția calculate_eggs pentru a calcula numărul de ouă pe care îl va avea fiecare proprietar la sfârșitul zilei. Rezultatul este scris în fișierul de ieșire "ou.out". Aceste funcții și blocul principal de cod asigură citirea corectă a datelor de intrare, validarea lor și rezolvarea problemei conform cerințelor, respectând și restricțiile impuse.
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width