만드는 중입니다

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

이진수 변환

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

요약
x0에서 0까지 N번의 변환으로 이어지는 수열을 만들되, 인접한 항의 차이들 중 최댓값과 최솟값의 차이가 가장 작아지도록 하는 수열을 찾는다.
난이도

어려움10점 중 8점

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

문제

자연수 x0x_0와 NN이 주어진다. 이제 x0x_0를 NN번의 변환을 거쳐 0으로 만들 것이다. 변환이란 양의 정수를 이진법으로 표기한 뒤, 1개 이상의 1을 0으로 바꾸는 작업이다. 예를 들어 9는 이진법으로 1001(2)1001_{(2)}인데, 9는 0(0‾000‾(2))0(\underline{0}00\underline{0}_{(2)}), 1(0‾001(2))1(\underline{0}001_{(2)}), 8(1000‾(2))8(100\underline{0}_{(2)})로 변환될 수 있다. 바뀐 자릿수는 밑줄로 표시했다. 목표는 xix_i를 변환해 xi+1x_{i+1}을 만드는 과정을 반복하여 xNx_N을 0으로 만드는 것이다.

조건을 만족하는 수열 X=x0,x1,x2,…,xNX = x_0, x_1, x_2, \ldots, x_N는 존재하지 않을 수도 있고, 여러 개 존재할 수도 있다. 수열이 존재할 때, 각 수열마다 인접한 원소들의 차의 집합 D(X)={x0−x1,x1−x2,…,xN−1−xN}D(X) = \{x_0-x_1, x_1-x_2, \ldots, x_{N-1}-x_N\}를 정의하자. 이 집합의 원소들의 최댓값과 최솟값의 차이를 최소화하는 수열 XX를 만들고자 한다. 즉, 가능한 모든 수열 XiX_i 중 D(Xi)D(X_i)에 속한 원소의 최댓값에서 최솟값을 뺀 값이 최소가 되는 XiX_i를 찾는다.

이상해 보일 수 있지만 답을 구해야 한다. 1초 안에 답할 수 있겠는가?

입력

첫 번째 줄에 변환할 자연수 x0x_0와 변환 횟수 NN이 공백으로 구분되어 주어진다. (1≤x0≤10161 \le x_0 \le 10^{16}, 1≤N≤501 \le N \le 50)

출력

조건을 만족하는 수열이 존재하지 않으면 첫 번째 줄에 -1을 출력한다.

조건을 만족하는 수열이 존재하면 수열의 원소 x1,x2,…,xNx_1, x_2, \ldots, x_N을 공백으로 구분하여 출력한다.

조건을 만족하는 수열이 여러 개 존재하면 아무 것이나 출력해도 된다.

예제2

  1. 예제 1

    입력
    23 2
    
    예상 출력
    16 0
    
  2. 예제 2

    입력
    48 5
    
    예상 출력
    -1