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

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

피보나치 단어

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

요약
주어진 a/b 패턴이 n번째 피보나치 단어에서 겹침을 포함해 연속 부분 문자열로 몇 번 나타나는지 센다.
난이도

보통10점 중 6점

유형
문자열, 동적 계획법, 문자열 매칭
정답자
아직 제출이 없습니다

문제

피보나치 단어는 피보나치 수와 비슷한 방식으로 정의된다.

FIB1=b,FIB2=a,FIBk+2=FIBk+1⊕FIBk(k≥1)\mathrm{FIB}_1 = \texttt{b}, \quad \mathrm{FIB}_2 = \texttt{a}, \quad \mathrm{FIB}_{k+2} = \mathrm{FIB}_{k+1} \oplus \mathrm{FIB}_k \quad (k \ge 1)

여기서 ⊕\oplus는 두 단어를 이어 붙이는 연산(연결, concatenation)을 뜻한다.

따라서 처음 몇 개의 피보나치 단어는 FIB3=ab\mathrm{FIB}_3 = \texttt{ab}, FIB4=aba\mathrm{FIB}_4 = \texttt{aba}, FIB5=abaab\mathrm{FIB}_5 = \texttt{abaab}, FIB6=abaababa\mathrm{FIB}_6 = \texttt{abaababa} 이다.

문자 a와 b로만 이루어진 패턴 단어와 정수 nn이 주어진다. 이 패턴이 nn번째 피보나치 단어 FIBn\mathrm{FIB}_n 안에서 연속한 부분 문자열로 몇 번 나타나는지 세어라. 두 등장은 서로 겹칠 수 있으므로, 패턴과 일치하는 모든 시작 위치를 각각 하나로 센다.

입력

첫째 줄에 패턴 단어가 주어진다. 이 단어는 a 또는 b로 이루어져 있으며 길이는 11 이상 3030 이하이다.

둘째 줄에 양의 정수 nn이 주어진다. (n≤200n \le 200)

출력

패턴 단어가 FIBn\mathrm{FIB}_n 안에 나타나는 횟수를 음이 아닌 정수 하나로 출력한다. 답은 매우 클 수 있으며 64비트 정수 범위를 넘을 수 있다.

예제4

  1. 예제 1

    입력
    aba
    6
    
    예상 출력
    3
    
  2. 예제 2

    입력
    b
    1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    a
    2
    
    예상 출력
    1
    
  4. 예제 4

    입력
    ab
    5
    
    예상 출력
    2