아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

산술 부호화

시간 제한1초메모리 제한1024 MB

요약
산술 부호화된 이진 문자열과 길이, p_A가 주어질 때 원래의 A와 B 메시지를 복원한다.
난이도

보통10점 중 4점

유형
구현, 수학, 시뮬레이션, 완전 탐색
정답자
아직 제출이 없습니다

문제

산술 부호화는 메시지를 0≤x<10 \leq x < 1인 실수 xx로 나타내는 방법이다. 메시지는 대문자 'A'와 'B'로만 이루어져 있다고 하자. 두 글자의 확률은 pAp_A와 pB=1−pAp_B = 1 - p_A이고, 0<pA<10 < p_A < 1이다.

현재 구간 [a,b)[a,b)는 처음에 [0,1)[0,1)로 두고, 글자 하나씩 처리하며 이 구간을 갱신한다. 글자를 부호화하려면 현재 구간을 다음과 같이 두 개의 부분 구간으로 나눈다. c=a+pA(b−a)c = a + p_A(b-a)라 하자. 다음 글자가 'A'이면 [a,c)[a,c)가 현재 구간이 된다. 그렇지 않으면 현재 구간은 [c,b)[c,b)가 된다. 이 과정을 메시지의 각 글자에 대해 반복한다. 마지막 구간이 [k,ℓ)[k,\ell)이면 부호화된 메시지는 kk로 정한다.

예를 들어 원래 메시지가 "ABAB"이고 pA=pB=0.5p_A = p_B = 0.5이면, 알고리즘에서 만나는 구간의 나열은 [ [0,1) \xrightarrow{A} [0, 0.5) \xrightarrow{B} [0.25, 0.5) \xrightarrow{A} [0.25, 0.375) \xrightarrow{B} [0.3125, 0.375). ] 따라서 부호화된 메시지는 0.3125, 즉 이진수로 0.0101이다.

메시지의 길이, 확률, 부호화된 메시지가 주어졌을 때 원래 메시지를 구하시오.

입력

첫째 줄에는 원래 메시지의 길이인 정수 NN (1≤N≤151 \leq N \leq 15)이 주어진다. 둘째 줄에는 pA=D8p_A = \frac{D}{8}임을 나타내는 정수 DD (1≤D≤71 \leq D \leq 7)가 주어진다. 셋째 줄에는 부호화된 메시지의 이진수 표현이 주어진다. 부호화된 메시지의 이진수 표현은 "0."으로 시작하고 길이가 3N+23N+2 이하임이 보장된다.

부호화된 메시지는 'A'와 'B'로만 이루어진 길이 NN의 원래 메시지에서 이 pAp_A 값을 사용해 나온 것임이 보장된다.

출력

원래 메시지를 출력한다.

예제2

  1. 예제 1

    입력
    4
    4
    0.0101
    
    예상 출력
    ABAB
    
  2. 예제 2

    입력
    6
    5
    0.100100100100101
    
    예상 출력
    ABBABA