3871 - Xor Pyramid: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Considerăm o piramida xor unde fiecare valoare este egală cu xorul valorilor din stânga jos și dreapta jos. Dându-se cel mai de jos nivel, care este valoarea din vârf? == Date de intrare == Programul citește de la tastatură numărul '''numar_valori''', iar apoi '''numar_valori''' numere naturale. '''numar_valori''' este mărimea bazei piramidei iar numerele naturale sunt valorile de la bază în ordinea în care sunt date. == Date de ieșire == Program...
 
No edit summary
 
Line 5: Line 5:
== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran numărul '''rezultat_xor_piramida''', reprezentând valoarea din vârful piramidei.
Programul va afișa pe ecran numărul '''rezultat_xor_piramida''', reprezentând valoarea din vârful piramidei.
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "'''Datele de intrare nu corespund restricțiilor impuse.'''".
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse." iar daca se indeplinesc se afiseaza "Datele de intrare nu corespund restricțiilor impuse."
== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 1 ⩽ '''numar_valori''' ⩽ 200000
* 1 ⩽ '''numar_valori''' ⩽ 200000
* cele '''numar_valori''' numere citite vor fi mai mici sau egale cu 1.000.000.000.
* cele '''numar_valori''' numere citite vor fi mai mici sau egale cu 1.000.000.000.


== Exemplu 1 ==
== Exemplul 1 ==
;Intrare
;Intrare
:8
8
:2 10 5 12 9 5 1 5
2 10 5 12 9 5 1 5
;Ieșire
;Ieșire
:9
Datele de intrare corespund restricțiilor impuse.
9
<br>
<br>
== Exemplu 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
:5
5
:2 10 5 12 1000000001
2 10 5 12 1000000001
;Ieșire
;Ieșire
:Datele de intrare nu corespund restricțiilor impuse.
Datele de intrare nu corespund restricțiilor impuse.
<br>
<br>


Line 50: Line 51:


         rezultat_xor_piramida = calcul_xor_piramida(valori_baza_piramida)
         rezultat_xor_piramida = calcul_xor_piramida(valori_baza_piramida)
        print("Datele de intrare corespund restricțiilor impuse.")
         print(rezultat_xor_piramida)
         print(rezultat_xor_piramida)
     except ValueError:
     except ValueError:

Latest revision as of 19:22, 4 January 2024

Cerinţa[edit]

Considerăm o piramida xor unde fiecare valoare este egală cu xorul valorilor din stânga jos și dreapta jos. Dându-se cel mai de jos nivel, care este valoarea din vârf?

Date de intrare[edit]

Programul citește de la tastatură numărul numar_valori, iar apoi numar_valori numere naturale. numar_valori este mărimea bazei piramidei iar numerele naturale sunt valorile de la bază în ordinea în care sunt date.

Date de ieșire[edit]

Programul va afișa pe ecran numărul rezultat_xor_piramida, reprezentând valoarea din vârful piramidei. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse." iar daca se indeplinesc se afiseaza "Datele de intrare nu corespund restricțiilor impuse."

Restricţii şi precizări[edit]

  • 1 ⩽ numar_valori ⩽ 200000
  • cele numar_valori numere citite vor fi mai mici sau egale cu 1.000.000.000.

Exemplul 1[edit]

Intrare
8
2 10 5 12 9 5 1 5
Ieșire
Datele de intrare corespund restricțiilor impuse.
9


Exemplul 2[edit]

Intrare
5
2 10 5 12 1000000001
Ieșire
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare[edit]

<syntaxhighlight lang="python" line> def calcul_xor_piramida(baza_piramida):

   valori_intermediare = baza_piramida.copy()
   while len(valori_intermediare) > 1:
       valori_noi = []
       for i in range(len(valori_intermediare) - 1):
           valori_noi.append(valori_intermediare[i] ^ valori_intermediare[i + 1])
       valori_intermediare = valori_noi
   return valori_intermediare[0]

if __name__ == "__main__":

   try:
       numar_valori = int(input())
       if not (1 <= numar_valori <= 200000):
           print("Datele de intrare nu corespund restricțiilor impuse.")
           exit()
       valori_baza_piramida = list(map(int, input().split()))
       if len(valori_baza_piramida) != numar_valori or any(val > 1000000000 for val in valori_baza_piramida):
           print("Datele de intrare nu corespund restricțiilor impuse.")
           exit()
       rezultat_xor_piramida = calcul_xor_piramida(valori_baza_piramida)
       print("Datele de intrare corespund restricțiilor impuse.")
       print(rezultat_xor_piramida)
   except ValueError:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>

Explicatie[edit]

Problema implică calcularea valorii din vârful unei piramide XOR, având ca bază un șir de numere. Operația XOR este aplicată iterativ pe liniile piramidei, astfel încât valoarea din vârf să fie rezultatul final. Soluția propusă constă într-o funcție (calcul_xor_piramida) care primește lista de valori de la baza piramidei și aplică operația XOR iterativ până când rămâne doar o singură valoare, care reprezintă valoarea din vârf. Programul citește mărimea bazei piramidei și valorile de la bază, efectuând verificări pentru a se asigura că datele de intrare respectă cerințele. Dacă există discrepanțe, se afișează un mesaj corespunzător.