Fie
n un numar natural. Codul Gray de ordin n
(notat Gray(n)) este constituit
din toate secventele binare de lungime n,
plasate astfel încât oricare doua secvente consecutive difera pe
o singura pozitie.
Pentru a construi Gray(n) se
poate aplica urmatorul procedeu recursiv:
Gray(1) este:
0
1
Pentru a determina Gray(n) cu
n>1, vom utiliza Gray(n-1)
astfel:
Primele 2n-1 secvente
din Gray(n) se obtin precedând
cu un 0 fiecare dintre cele 2n-1
secvente Gray(n-1).
Ultimele 2n-1 secvente
din Gray(n) se obtin precedând
cu un 1 fiecare dintre cele 2n-1
secvente din Gray(n-1), considerate
în ordine inversa.
Exemplu:
Gray(2)
Gray(3)
00
01
11
10
000
001
011
010
110
111
101
100
Codul
Gray(n) permite codificarea numerelor naturale din multimea {0,
1, ..., 2n-1}
Ca orice cod si codul Gray trebuie sa permita realizarea operatiilor de codificare/decodificare. Operatia de codificare
Se da P un numar natural din
multimea {0, 1, ..., 2n-1}.
Sa se determine numarul natural M
a carui scriere în baza 2 este cea de a P-a
secventa din Gray(n). Operatia de decodificare
Se da M un numar natural din
multimea {0, 1, ..., 2n-1}.
Sa se determine numarul natural P
cu proprietatea ca scrierea lui M
în baza 2 reprezinta cea
de a P-a secventa din Gray(n).
Cerinta
Scrieti un program care sa realizeze operatii de codificare/decodificare.
Date
de intrare
Fisierul de intrare gray.in contine
o singura linie ce contine 3 valori c
n x separate prin câte un singur spatiu. Valoarea c
este un caracter ce poate fi doar 'C'
sau 'D'. Valoarea n
este un numar natural ce indica ordinul codului Gray. Valoarea x
este un numar natural din multimea {0,
1, …, 2n-1}. În cazul în care c='C'
se cere codificarea numarului x,
iar în cazul în care c='D',
se solicita decodificarea numarului x.
Date
de iesire
Fisierul de iesire gray.out va
contine o singura linie pe care va fi scris un singur numar natural, reprezentând
valoarea x codificata, respectiv
decodificata (în functie de valoarea caracterului c
din fisierul de intrare).
Restrictii
n<=500
În codul Gray secventele sunt numerotate de la 0.