CSA Round #41 Tennis Tournament

题目链接

题意:

淘汰赛制游戏,给出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("");
    }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值