0190 - Oglindiri

From Bitnami MediaWiki
Revision as of 20:38, 17 April 2023 by Flaviu (talk | contribs) (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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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 pe prima linie cele n elemente ale vectorul obținute după cele m oglindiri, separate prin câte un spațiu.

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
55 31 24 37 16 63 10 66 44 50

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line>

  1. 0190 - Oglindiri

def read_input():

   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


def solve(n, v, m, queries):

   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


def validate_output(result):

   print(*result)


if __name__ == '__main__':

   input_data = read_input()
   output_data = solve(*input_data)
   validate_output(output_data)

</syntaxhighlight>

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