[BOJ 29633] 수 맞추기 게임
View as PDF
Submit solution
Points:
4
Time limit:
3.0s
Memory limit:
512M
Problem types
Allowed languages
Assembly, Awk, C, C++, Java, Pascal, Perl, Python, Sed, Text
K명의 학생이 선생님이 고른 수를 맞추는 게임을 한다. 게임이 진행되는 방식은 다음과 같다.</p>
- 선생님은 1 이상 N 이하 범위의 랜덤한 정수 X를 고른다. 단, 학생들은 N의 값을 미리 알고 있다.
- 1번 학생부터 한 명씩 차례대로 1 이상 N 이하의 수 Y를 골라 질문한다. 만약 X=Y 이면 해당 학생의 승리이다. 그렇지 않은 경우, 선생님은 Y 의 값 및 X와 Y의 대소 관계를 모든 학생들에게 공개한다.
- K번 학생까지 질문을 완료한 경우, 다시 1번 학생의 차례로 돌아간다. X를 맞추는 학생이 나올 때 까지 게임을 진행한다.
위 게임을 할 때, 각 학생들은 자신의 승리 확률을 가장 높이는 질문을 한다. 또한 그러한 질문의 선택지가 여러가지 있는 경우에는 그 중에서 uniform random하게 수를 골라 질문한다. 학생들이 이 전략을 사용할 것임을 이미 모든 학생들이 알고 있는 상태이다.
당신의 목표는 1번 학생이 첫 차례에서 질문할 수 있는 수의 후보가 무엇인지를 찾는 것이다.
양의 정수 M과 학생의 수 K가 주어졌을 때, N = 1, 2, ..., M 인 경우 각각에 대해 첫 차례에 1번 학생이 질문할 수의 후보들을 구하는 프로그램을 작성하라.
입력 형식
첫 번째 줄에 양의 정수 M (2 ≤ M ≤ 200)이 주어진다.</p>
두 번째 줄에는 학생의 수 K (2 ≤ K ≤ 50)이 주어진다.
출력 형식
M개의 줄에 걸쳐 정답을 출력한다.</p>
i번째 줄에는 N = i인 경우에 1번 학생의 첫 질문으로 가능한 답의 후보들을 오름차순으로 P1, P2, ..., Pk라 할 때, k+1개 수를 공백을 사이에 두고 k P1 P2 ... Pk 의 형식으로 출력한다.
예제 입력 1
4
3
예제 출력 1
1 1
2 1 2
3 1 2 3
2 1 4
예제 입력 2
15
5
예제 출력 2
1 1
2 1 2
3 1 2 3
4 1 2 3 4
5 1 2 3 4 5
2 1 6
2 1 7
2 1 8
2 1 9
2 2 9
2 3 9
2 4 9
2 6 8
2 1 14
1 8
Comments