3871 - Xor Pyramid
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
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.".
Restricţii şi precizări
- 1 ⩽ numar_valori ⩽ 200000
- cele numar_valori numere citite vor fi mai mici sau egale cu 1.000.000.000.
Exemplu 1
- Intrare
- 8
- 2 10 5 12 9 5 1 5
- Ieșire
- 9
Exemplu 2
- Intrare
- 5
- 2 10 5 12 1000000001
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare
<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(rezultat_xor_piramida) except ValueError: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>
Explicatie
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.