HNUST OJ 2289 爱丽丝的人偶

46 篇文章 23 订阅

 思路

这种题 主要还是模拟

可以让 n q 循环减去 (n+1)/2 求得所在q的轮数

令  n_{i}  为  第  _{i}  轮 的 人偶数量 , n_{0}  为 人偶总数

第  i  轮 离开  \frac{n+1}{2} 的 人偶

第  i  轮 的第一个人偶是 2^{i - 1}-1

每轮的人偶号数成等差数列

 第  i  轮 的第  _{j}  个人偶是 2^{i - 1}-1+(j-1)*2^{i}

#include <bits/stdc++.h>
 
using namespace std;
   
int main(){
    long long n,q,i=1,j;
    cin >> n >> q ;
    while (1) {
        j = (n + 1)/2 ;
        if (q <= j) break ;
        n -= j ;
        q -= j ;
        i++ ;
    }
    cout << (1ll << (i - 1)) - 1 + (q-1)*(1ll << i) ;
    return 0;
}
/**************************************************************
    Problem: 2289
    User: 21XXXXXXXX
    Language: C++
    Result: 正确
    Time:0 ms
    Memory:2024 kb
****************************************************************/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值