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
0190 - Oglindiri
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/190/oglindiri 0190 - Oglindiri] ---- == Cerinţa == Se dă un vector cu n elemente numere naturale, numerotate de la 1 la n, și m perechi de indici (i,j), cu 1≤i<j≤n. Fiecare secvență de elemente determinată de o pereche (i,j) se oglindește – primul elemente din secvență se interschimbă cu ultimul, al doilea cu penultimul, etc.. Să se afișeze elementele vectorului după realizarea, în ordine, a celor m oglindiri. == Date de intrare == Fişierul de intrare oglindiri.in conţine pe prima linie numărul n, iar pe a doua linie cele n elemente ale vectorului. Următoarea linie conține numărul m, iar următoarele m linii câte o pereche de indici i j. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Datele sunt introduse corect."'''și fișierul oglindiri.out n elemente ale vectorul obținute după cele m oglindiri, separate prin câte un spațiu''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''. == Restricţii şi precizări == * 1 ≤ n ≤ 100 * numerele de pe a doua linie a fişierului de intrare vor fi mai mici decât 1000 * 1 ≤ m ≤ 100 == Exemplu 1 == ; Intrare : oglindiri.in : 10 : 55 50 16 37 66 44 31 24 10 63 : 3 : 5 8 : 2 6 : 6 10 ; Ieșire : oglindiri.out : Datele sunt introduse correct. : 55 31 24 37 16 63 10 66 44 50 == Exemplu 2 == ; Intrare : oglindiri.in : 2 : 55 50 16 37 66 44 31 24 10 63 : 3 2 1 : 51 8 : 22 6 : 68 10 ; Ieșire : Datele nu corespund restricțiilor impuse. == Rezolvare == === Rezolvare ver. 1 === <syntaxhighlight lang="python" line> # 0190 - Oglindiri def validate_input(n, vector, m, perechi): if n < 1 or n > 100 or m < 1 or m > 100: return False if len(vector) != n or any(num >= 1000 for num in vector): return False if any(i >= j or i <= 0 or j > n for i, j in perechi): return False return True def oglindiri(n, vector, m, perechi): if not validate_input(n, vector, m, perechi): return "Datele nu corespund restricțiilor impuse." for i, j in perechi: i -= 1 j -= 1 while i < j: vector[i], vector[j] = vector[j], vector[i] i += 1 j -= 1 return vector if __name__ == "__main__": with open("oglindiri.in", "r") as fin: n = int(fin.readline()) vector = list(map(int, fin.readline().split())) m = int(fin.readline()) perechi = [] for _ in range(m): i, j = map(int, fin.readline().split()) perechi.append((i, j)) rezultat = oglindiri(n, vector, m, perechi) if isinstance(rezultat, str): print(rezultat) else: print("Datele sunt introduse corect.") print(" ".join(str(num) for num in rezultat)) </syntaxhighlight> == Explicatie Rezolvare == Funcția validate_input(n, vector, m, perechi): Această funcție primește parametrii n, vector, m și perechi și are rolul de a valida datele de intrare conform restricțiilor impuse în cerință. Verificările includ: Verifică dacă n și m se încadrează în intervalul permis (1 ≤ n, m ≤ 100). Verifică dacă lungimea listei vector este egală cu n și dacă toate numerele din vector sunt mai mici decât 1000. Verifică dacă toate perechile (i, j) din lista perechi satisfac restricțiile: 1 ≤ i < j ≤ n. Funcția returnează True dacă datele sunt valide și False în caz contrar. Funcția oglindiri(n, vector, m, perechi): Această funcție primește datele de intrare n, vector, m și perechi și rezolvă problema în conformitate cu cerințele. Algoritmul funcției este următorul: Verifică dacă datele de intrare sunt valide utilizând funcția validate_input. Dacă nu sunt valide, funcția returnează un mesaj de eroare. Pentru fiecare pereche (i, j) din lista perechi: Aduce indicii i și j la forma corectă pentru indexarea în Python (scăzând 1 din fiecare). Realizează oglindirea în lista vector între indicii i și j, prin interschimbarea elementelor în mod repetat până când indicii se întâlnesc. Returnează lista vector obținută după efectuarea oglindirilor. Blocul if __name__ == "__main__": Acest bloc de cod verifică dacă scriptul Python este rulat direct (nu importat ca modul în alt script). În acest caz, citirea datelor de intrare se face din fișierul "oglindiri.in" și se apelează funcția oglindiri pentru a rezolva problema. Rezultatul este afișat în consolă.
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