목걸이
시간 제한2초메모리 제한1024 MB
구슬 n개의 값이 주어졌을 때, 총합이 작은 순서이고 합이 같으면 구슬 번호의 사전순으로 정렬한 부분집합 중 k번째를 찾습니다.
문제
바이트나에게는 1번부터 번까지 번호가 붙은 구슬 개가 있다. 구슬은 모두 서로 다르고, 구슬마다 가치가 정해져 있다. 가치는 바이트알라 단위로 주어진다.
바이트나는 이 구슬 중 일부로 목걸이를 만들려고 한다. 목걸이를 만드는 방법은 여러 가지이며, 사용한 구슬의 집합이 다르면 서로 다른 방법으로 본다. 바이트나는 모든 방법을 다음 기준으로 정렬한다.
- 구슬 가치의 합이 작은 방법이 앞에 온다.
- 가치의 합이 같으면, 사용한 구슬 번호를 오름차순으로 정렬한 목록을 사전순으로 비교한다.∗
예를 들어 가치가 순서대로 3, 7, 4, 3인 구슬 4개가 있다고 하자. 이때 목걸이는 16가지 방법으로 만들 수 있다. 아래 표는 바이트나의 기준으로 정렬한 결과이다.
바이트나는 이 순서에서 번째에 있는 목걸이를 원한다. 그 목걸이를 찾아라.
∗ 두 수열 와 에서 첫 번째 수열이 사전순으로 앞서는 경우는 두 가지이다. 첫 번째 수열이 두 번째 수열의 앞부분이고 인 경우(), 또는 처음으로 달라지는 위치 에서 인 경우()이다.
입력
첫 줄에 양의 정수 과 가 공백 하나로 구분되어 주어진다. 은 구슬의 개수이고, 는 위의 순서에서 찾을 방법의 번호이다.
둘째 줄에 양의 정수 이 공백으로 구분되어 주어진다. 는 번 구슬의 가치이다.
바이트나가 실수하지 않았으므로, 서로 다른 목걸이를 만드는 방법은 적어도 가지 존재한다.
출력
첫 줄에 찾은 목걸이에 쓰인 구슬 가치의 합을 출력한다.
둘째 줄에 목걸이에 사용된 구슬 번호를 오름차순으로 공백으로 구분하여 출력한다.