만드는 중입니다

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

Dedenne

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

요약
연속된 0이 없고 서로 접두사가 되지 않는 이진 코드워드 n개를 고를 때, 사전을 외우는 비용의 최솟값을 구합니다.
난이도

어려움10점 중 8점

유형
트리, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

Dedenne의 유명한 안테나에 대해 들어 본 적이 있는가? 이 안테나 덕분에 Dedenne은 아주 멀리 떨어져 있어도 서로 통신할 수 있다. 하지만 Dedenne은 지금의 통신 방식이 최적이 아닐 것이라고 의심한다. 그래서 Dedenne은 언어를 최적화하려고 당신을 찾아왔다.

Dedenne이 사용하는 언어는 nn개의 단어로 이루어져 있다. 단어를 전송하려면 Dedenne은 먼저 암기한 사전으로 단어를 비어 있지 않은 이진 문자열(코드워드)로 바꾼 뒤, 그 문자열을 전송한다. 수신자는 같은 사전을 사용해 단어를 복원한다. 전송이 올바르게 이루어지도록, 사전의 두 코드워드는 같을 수 없고 어떤 문자열도 다른 문자열의 접두사일 수 없다.

Dedenne의 특성상 코드워드에는 연속된 0 비트 두 개가 있을 수 없다. 전송할 때 연속된 0은 ∞\infty로 합쳐져 송신기를 무기한 멈추게 한다.

사전은 외우기가 매우 번거롭다. 형식적으로, 이진 문자열 ss가 정확히 kk개의 코드워드의 접두사일 때 ss의 비용을 C(s)C(s)라고 하자. 그러면 C(s)=∑j=1k⌊1+log⁡2j⌋C(s)=\sum_{j=1}^{k}\lfloor 1+\log_2 j\rfloor 이다. 사전을 외우는 비용은 적어도 하나의 코드워드의 접두사인 모든 이진 문자열 ss에 대한 C(s)C(s)의 합이다.

예를 들어 코드워드가 0, 10, 110, 111인 네 개짜리 사전을 보자. 이 사전을 외우는 비용은 C(ε)+C(0)+C(1)+C(10)+C(11)+C(110)+C(111)=8+1+5+1+3+1+1=20C(\varepsilon)+C(0)+C(1)+C(10)+C(11)+C(110)+C(111)=8+1+5+1+3+1+1=20이다. 여기서 ε\varepsilon은 빈 문자열이다.

nn개의 단어를 담는 사전을 외우는 비용의 최솟값은 얼마인가?

입력

첫 번째 줄에 독립된 테스트 케이스의 개수 tt (1≤t≤50 0001 \le t \le 50\,000)가 주어진다. 이후 tt개의 줄에는 각각 정수 nn (2≤n≤10152 \le n \le 10^{15}) 하나가 주어진다. nn은 Dedenne이 외워야 하는 단어의 수이다.

출력

각 테스트 케이스마다 nn개의 단어를 담는 사전의 외우기 비용 최솟값을 정수 하나로 출력한다.

힌트

아래 그림은 n=10n = 10일 때 외우기 비용을 최소화하는 데 쓸 수 있는 사전이다.

예제1

  1. 예제 1

    입력
    3
    2
    4
    10
    
    예상 출력
    5
    20
    98