0190 - Oglindiri: Diferență între versiuni
(Pagină nouă: 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. == D...) |
Fără descriere a modificării |
||
Linia 12: | Linia 12: | ||
== Date de ieșire == | == Date de ieșire == | ||
Fişierul de ieşire oglindiri.out va conţine pe | Fişierul de ieşire oglindiri.out va conţine: | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: | |||
'''"Datele sunt introduse corect."''', apoi pe un rând nou '''numărul c''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''. | |||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
* 1 ≤ n ≤ 100 | * 1 ≤ n ≤ 100 | ||
Linia 27: | Linia 28: | ||
: 6 10 | : 6 10 | ||
; Ieșire | ; Ieșire | ||
: Datele nu corespund restricțiilor impuse. | |||
: Datele sunt introduse correct. | |||
: 55 31 24 37 16 63 10 66 44 50 | : 55 31 24 37 16 63 10 66 44 50 | ||
Linia 35: | Linia 38: | ||
def read_input(): | def read_input(): | ||
n = int(input()) | try: | ||
n = int(input()) | |||
v = list(map(int, input().split())) | |||
m = int(input()) | |||
queries = [] | |||
for i in range(m): | |||
i, j = map(int, input().split()) | |||
queries.append((i, j)) | |||
return n, v, m, queries | |||
except: | |||
print("Datele nu corespund restrictiilor impuse.") | |||
def solve(n, v, m, queries): | def solve(n, v, m, queries): | ||
for i, j in queries: | try: | ||
for i, j in queries: | |||
i, j = i-1, j-1 | |||
while i < j: | |||
v[i], v[j] = v[j], v[i] | |||
i += 1 | |||
j -= 1 | |||
return v | |||
except: | |||
print("Datele nu corespund restrictiilor impuse.") | |||
Linia 62: | Linia 71: | ||
input_data = read_input() | input_data = read_input() | ||
output_data = solve(*input_data) | output_data = solve(*input_data) | ||
validate_output(output_data) | if output_data: | ||
validate_output(output_data) | |||
</syntaxhighlight> | </syntaxhighlight> |
Versiunea de la data 28 aprilie 2023 14:29
Sursa: 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
Fişierul de ieşire oglindiri.out va conţine: Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou numărul c, 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
- Intrare
- 10
- 55 50 16 37 66 44 31 24 10 63
- 3
- 5 8
- 2 6
- 6 10
- Ieșire
- Datele nu corespund restricțiilor impuse.
- Datele sunt introduse correct.
- 55 31 24 37 16 63 10 66 44 50
Rezolvare
Rezolvare ver. 1
# 0190 - Oglindiri
def read_input():
try:
n = int(input())
v = list(map(int, input().split()))
m = int(input())
queries = []
for i in range(m):
i, j = map(int, input().split())
queries.append((i, j))
return n, v, m, queries
except:
print("Datele nu corespund restrictiilor impuse.")
def solve(n, v, m, queries):
try:
for i, j in queries:
i, j = i-1, j-1
while i < j:
v[i], v[j] = v[j], v[i]
i += 1
j -= 1
return v
except:
print("Datele nu corespund restrictiilor impuse.")
def validate_output(result):
print(*result)
if __name__ == '__main__':
input_data = read_input()
output_data = solve(*input_data)
if output_data:
validate_output(output_data)
Explicatie Rezolvare
rima funcție, read_input(), citește datele de intrare și le returnează ca un tuplu.
A doua funcție, solve(), primește datele de intrare și efectuează cele m operații de oglindire asupra vectorului v. În interiorul buclei while, interschimbăm elementele de la indicii i și j, apoi incrementăm i și decrementăm j. De notat că în Python indexarea începe de la 0, așa că trebuie să scădem 1 din fiecare dintre indicii i și j.
A treia funcție, validate_output(), afișează elementele vectorului rezultat, separate prin spațiu.
În final, dacă programul rulează ca script, citim datele de intrare cu read_input(), rezolvăm problema cu solve() și validăm rezultatul cu validate_output()