0190 - Oglindiri: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Fără descriere a modificării
Linia 14: Linia 14:
Fişierul de ieşire oglindiri.out va conţine:
Fişierul de ieşire oglindiri.out va conţine:
Dacă datele sunt introduse corect, pe ecran se va afișa:  
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."'''.
'''"Datele sunt introduse corect."''', apoi pe un rând nou ''' 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 ==
== Restricţii şi precizări ==
* 1 ≤ n ≤ 100
* 1 ≤ n ≤ 100
* numerele de pe a doua linie a fişierului de intrare vor fi mai mici decât 1000
* numerele de pe a doua linie a fişierului de intrare vor fi mai mici decât 1000
* 1 ≤ m ≤ 100
* 1 ≤ m ≤ 100
== Exemplu ==
== Exemplu ==
; Intrare
; Intrare
: oglindiri.in
: 10
: 10
: 55 50 16 37 66 44 31 24 10 63  
: 55 50 16 37 66 44 31 24 10 63  
Linia 28: Linia 29:
: 6 10  
: 6 10  
; Ieșire
; Ieșire
: Datele nu corespund restricțiilor impuse.
: oglindiri.out
: Datele sunt introduse correct.
: Datele sunt introduse correct.
: 55 31 24 37 16 63 10 66 44 50  
: 55 31 24 37 16 63 10 66 44 50  
== Exemplu 1  ==
; 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
: oglindiri.out
: Datele nu corespund restricțiilor impuse.


== Rezolvare ==  
== Rezolvare ==  

Versiunea de la data 3 mai 2023 07:52

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 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 1

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
oglindiri.out
Datele nu corespund restricțiilor impuse.


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()