이진수 변환
시간 제한1초메모리 제한512 MB
x0에서 0까지 N번의 변환으로 이어지는 수열을 만들되, 인접한 항의 차이들 중 최댓값과 최솟값의 차이가 가장 작아지도록 하는 수열을 찾는다.
문제
자연수 와 이 주어진다. 이제 를 번의 변환을 거쳐 0으로 만들 것이다. 변환이란 양의 정수를 이진법으로 표기한 뒤, 1개 이상의 1을 0으로 바꾸는 작업이다. 예를 들어 9는 이진법으로 인데, 9는 , , 로 변환될 수 있다. 바뀐 자릿수는 밑줄로 표시했다. 목표는 를 변환해 을 만드는 과정을 반복하여 을 0으로 만드는 것이다.
조건을 만족하는 수열 는 존재하지 않을 수도 있고, 여러 개 존재할 수도 있다. 수열이 존재할 때, 각 수열마다 인접한 원소들의 차의 집합 를 정의하자. 이 집합의 원소들의 최댓값과 최솟값의 차이를 최소화하는 수열 를 만들고자 한다. 즉, 가능한 모든 수열 중 에 속한 원소의 최댓값에서 최솟값을 뺀 값이 최소가 되는 를 찾는다.
이상해 보일 수 있지만 답을 구해야 한다. 1초 안에 답할 수 있겠는가?
입력
첫 번째 줄에 변환할 자연수 와 변환 횟수 이 공백으로 구분되어 주어진다. (, )
출력
조건을 만족하는 수열이 존재하지 않으면 첫 번째 줄에 -1을 출력한다.
조건을 만족하는 수열이 존재하면 수열의 원소 을 공백으로 구분하여 출력한다.
조건을 만족하는 수열이 여러 개 존재하면 아무 것이나 출력해도 된다.