문제 보기 - 분배 (kriii3_Q)

시간 제한 메모리 제한 제출 횟수 통과한 사람 수 비율
1000 ms 512 MiB 33 23 69.7%

0 이상 2N-1 이하의 모든 정수가 하나씩 있다. 또한 정수들을 담을 수 있는 상자가 2K개 있으며, 각 상자에는 1부터 2K까지의 자연수 번호가 차례대로 붙어 있다.

나는 가지고 있는 2N개의 정수들을 2K개의 상자에 넣으려고 한다. 나는 정수들이 골고루 분배되기를 원하므로, 각 상자에 들어 있는 정수의 개수는 서로 같아야 한다. 따라서 분배 결과 2K개의 상자 각각에는 2N-K개의 서로 다른 정수들이 들어 있게 된다. 그런데 안타깝게도 나는 완벽주의자이기 때문에, 모든 상자에 대해 그 상자 안에 들어 있는 모든 수를 각각 이진수로 나타냈을 때 1의 개수의 합이 서로 같도록 분배해야 한다.

입력

첫 번째 줄에 두 개의 자연수 N, K (1 ≤ K < N ≤ 16)이 공백을 사이로 두고 주어진다.

출력

2K개의 줄을 출력한다. 이 중 i(1 ≤ i ≤ 2K)번째 줄에는 i번 상자에 들어 있는 정수 2N-K개를 공백 하나를 사이로 두고 출력한다.

전체 출력에서 같은 수가 여러 번 나오면 안 되고, 각 상자마다 들어 있는 모든 수를 이진수로 나타냈을 때 나타난 1의 개수의 합이 모든 상자에 대해 동일해야 한다.

부분문제

부분문제 점수
1 24

이 문제는 부분문제가 없는 것과 같다.

입출력 예제

입력 예시 출력 예시
2 10 3
1 2
  • 1번 상자: 0 = 0(2), 3 = 11(2) 이므로, 1은 총 2개
  • 2번 상자: 1 = 1(2), 2 = 10(2) 이므로, 1은 총 2개

상자에 있는 수들이 중복되지 않고, 각 상자마다 그 안에 들어 있는 수를 이진수로 나타냈을 때 나타나는 1의 개수의 합이 2로 서로 같으므로, 이 분배는 완벽주의자인 나에게도 만족스러운 분배인 것이다.