만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

피보나치 문자열 2

면접 대비

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

요약
각 테스트 케이스마다 피보나치 문자열 F_n의 앞 k글자에 포함된 a의 개수를 구합니다.
난이도

보통10점 중 5점

유형
분할 정복, 재귀, 문자열
정답자
아직 제출이 없습니다

문제

수학에서는 점화식이 자주 쓰인다. 보통 수열을 정의하는 데 쓰지만, 문자열의 수열을 정의하는 데에도 쓸 수 있다.

점화식으로 정의되는 문자열의 예로 피보나치 문자열 F0F_0, F1F_1, …\ldots이 있다. 이 문자열은 다음과 같이 정의된다. F0=aF_0=a, F1=bF_1=b, Fi=Fi−2Fi−1F_i=F_{i-2}F_{i-1} (i>1i > 1). 처음 일곱 개의 피보나치 문자열은 a, b, ab, bab, abbab, bababbab, abbabbababbab이다.

디마는 알고리즘 동아리에서 문자열 알고리즘을 공부하고 있으며 피보나치 문자열을 최근에 알게 되었다. 그는 i가 커질수록 문자열의 길이가 매우 빠르게 늘어나서, FiF_i의 모든 문자를 구하려면 메모리가 너무 많이 필요하다는 것을 알았다. 지난번에는 FiF_i의 일부 문자만 구하는 문제를 풀었다. 이번에는 더 어려운 문제에 도전한다. FiF_i의 처음 kk개 문자 중 문자 a가 몇 번 나타나는지 구해야 한다.

이 문제를 푸는 프로그램을 작성하라.

입력

첫 줄에 테스트 데이터의 개수 TT (1≤T≤1001 \le T \le 100)가 주어진다. 이어지는 TT개 줄에는 각각 정수 nn과 kk (0≤n≤450 \le n \le 45, 1≤k≤∣Fn∣1 \le k \le |F_n|)가 주어진다. 여기서 ∣Fn∣|F_n|은 문자열 FnF_n의 길이이며, 문자의 위치는 1부터 번호를 매긴다.

출력

TT개 줄에 걸쳐 각 테스트 데이터의 답을 한 줄에 하나씩 출력한다. 답은 FnF_n의 처음 kk개 문자 중 a의 개수이다.

예제1

  1. 예제 1

    입력
    4
    0 1
    1 1
    3 2
    7 7
    
    예상 출력
    1
    0
    1
    3