题意:
淘汰赛制游戏,给出K 和M ,求出一个排列使得第K个人恰在获胜M场后被淘汰
分析:
前
(1<<M)−1
位置安排比K弱的,第
(1<<M)
位置安排K,第
(1<<M)+1
场安排比K强的,其它随意安排。
在判断不存在排列时,忽略了K为
(1<<N)
,但
M!=N
的情况,导致wa了一发
代码:
int main()
{
int n, k, m;
scanf("%d%d%d", &n, &k, &m);
if (k < (1 << m) || k == (1 << n) && m != n) {
puts("-1");
} else {
for (int i = 1; i < (1 << m); i++) {
printf("%d ", i);
}
printf("%d ", k);
for (int i = k + 1; i <= (1 << n); i++) {
printf("%d ", i);
}
for (int i = (1 << m); i < k; i++) {
printf("%d ", i);
}
puts("");
}
}