피보나치 동전

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

요약
매일 피보나치 동전 한 개가 재산에 더해질 때, 그 누적 재산을 최소 개수의 피보나치 동전으로 나타내는 데 필요한 개수를 구한다.
난이도

어려움10점 중 8점

유형
그리디, 정수론, 수학, 구현
정답자
아직 제출이 없습니다

문제

준혁이는 피보나치 동전을 화폐로 사용하는 피보나치 마을에서 살고 있다. ii번째 피보나치 동전의 가치는F_iF\_i 이다.

F_iF\_i는 피보나치 수열의 ii번째 수를 의미한다. F_1=1,F_2=1F\_1 = 1, F\_2 = 1 이고, i≥3i \geq 3에서 F_i=F_i−1+F_i−2F\_i = F\_{i-1} + F\_{i-2}로 정의된다.

준혁이의 ii일차의 재산은 M_iM\_i로 나타낸다. 준혁이는 00일차에 재산이 없으므로 M_0=0M\_0 = 0이다. 준혁이는 11일차부터 NN일차까지 NN일간 정당한 노동을 하여 ii일차에 일당으로 A_iA\_i번째 피보나치 동전 11개를 받게 된다. 즉 M_i=M_i−1+F_A_iM\_i = M\_{i-1}+F\_{A\_i}이다.

준혁이는 매일 밤, 자신의 재산을 최소 개수의 피보나치 동전으로 표현할 때 필요한 동전의 수를 알고 싶어한다. 11일차 부터 NN일차 까지, 재산 M_iM\_i를 피보나치 동전들의 합으로 표현할 때 필요한 최소 동전 개수 C_iC\_i를 구하여라.

입력

첫째 줄에 NN이 주어진다. (1≤N≤250,000)(1 \leq N \leq 250\\,000)

둘째 줄에 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (1≤A_i≤1,000,000)(1 \leq A\_i \leq 1\\,000\\,000)

출력

첫째 줄에 C_1,C_2,⋯ ,C_NC\_1, C\_2, \cdots, C\_N을 공백으로 구분하여 출력한다.

예제2

  1. 예제 1

    입력
    3
    1 2 5
    
    예상 출력
    1 1 2
    
  2. 예제 2

    입력
    5
    5 10 15 20 25
    
    예상 출력
    1 2 3 4 5