没事摸摸鱼

在这里插入图片描述
思路:第一眼看过去以为是约瑟夫环,看了看约瑟夫环的解,感觉题目给出的数据范围过大,约瑟夫环肯定解决不了。既然数据很大,而且隔一个人淘汰,那第一波将会把全部的偶数淘汰,之后再逐步淘汰奇数,于是想到会不会是一个找规律的题。
我们计算出前10个数据对应的结果如下:

输入输出输入输出
11105
21117
33129
411311
531413
651515
77161
81173
93185

我们可以很明显的看出来:
1.对于一个 2 n 2^n 2n这样的数字(比如1,2,4,8)输入恒为1
2.对于一个 2 n − 1 2^n-1 2n1这样的数字(比如3,7,15)输出就是他本身,即 2 n − 1 2^n-1 2n1
3.对于 2 n − 1 − 2 n 2^{n-1}-2^n 2n12n之间的数,呈现首项为1,公差为2的等比数列,求出 2 n 2^n 2n再计算出来就行了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<list>
#include<cmath>
#include<algorithm>
#include<fstream>
#include<sstream>
#include<time.h>
#define lson node<<1,st,mid
#define rson node<<1|1,mid+1,ed
#define mem(a,x) memset(a,x,sizeof(a))
#define me(a) memset(a,0,sizeof(a))
#define IOS ios::sync_with_stdio(false)
#define lowbit(x) x&(-x)
#define up(i,x,y) for(long long i=x;i<y;i++)
#define down(i,x,y) for(long long i=x;i>=y;i--)
typedef long long ll;
const ll mod=1e9+7;
const ll INF=0x3f3f3f3f;
const int maxn=1e5+5;
const double pi = acos(-1.0);
const int N=1e3+5;
using namespace std;
 
 
bool pd(ll n){
    if(n&(n-1)==0) return true;
    else return false;
}//判断一个数是不是2的n次方
ll qpow(ll a, ll n)//快速幂(因为左移符号好像有点问题,所以用了快速幂)
{
    if (n == 0)
        return 1;
    else if (n % 2 == 1)
        return qpow(a, n - 1) * a;
    else
    {
        ll temp = qpow(a, n / 2);
        return temp * temp;
    }
}
int main()
{
    // freopen("in.txt","r",stdin);
    // freopen("out.txt","w",stdout);
    ll n;
    cin>>n;
    if(pd(n)) cout<<"1"<<endl;
    else{
        if(pd(n+1)) cout<<n<<endl;
        else{
            ll ans=0;
            ll k = n;
            while(k){
                ans += 1;
                k/=2;
            }
            // cout<<ans<<endl;
            ll x = qpow(2,ans);
            // cout<<x<<endl;
            ll res=x-1-(x-1-n)*2;
            cout<<res<<endl;
        }
    }
}
要在PyCharm中安装模块,可以按照以下步骤进行操作: 1. 打开PyCharm,并在菜单栏中选择“File”>“Settings”。 2. 在弹出的窗口中,选择“Project: [your project name]”>“Python Interpreter”。 3. 在Python解释器页面的右上角,点击“+”按钮来添加新的模块。 4. 在弹出的对话框中,搜索要安装的模块名称(例如pygame),然后选择需要安装的版本。 5. 点击“Install Package”按钮来安装选定的模块。 请注意,安装过程可能需要一些时间,取决于您的网络连接和模块的大小。 引用和引用提供了在Windows操作系统上使用命令行安装模块的方法。您可以打开运行框,输入"cmd"并按回车,然后在命令提示符窗口中使用"pip install 模块名"的命令来安装模块。例如,如果要安装pygame模块,可以输入"pip install pygame"并按回车键来安装成功。 至于您提到的摸,摸一般指的是在工作或学习时间偷懒或悠闲的行为。PyCharm是一款非常受开发者欢迎的集成开发环境,用于Python编程,它提供了丰富的功能和工具,帮助开发者提高效率和质量。您可以使用PyCharm来编写、调试和运行Python代码,同时还可以管理项目、版本控制等。所以,在PyCharm中进行编程工作是非常正常和专业的行为,不建议在工作或学习时间进行摸。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【摸系列】如何用Python做一个有趣的Loading彩蛋游戏~](https://blog.csdn.net/m0_67575344/article/details/126504221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【快乐摸】— 用python开发益智游戏](https://blog.csdn.net/yxczsz/article/details/126652126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值