题解 | #小q的数列#

小q的数列

https://ac.nowcoder.com/acm/problem/15979

其实此题的难点不在于计算f(n)所代表的值 难点在于计算最早第几项出现的 而我们打表发现一下规律

alt 第几项与其二进制中1的数量有关系 具体数值为2^x-1而x也与f(n)的值相等 所以代码如下

#include <bits/stdc++.h>

using namespace std;

long long f(long long x)
{
    if(x==0)
    {
        return 0;
    }
    if(x==1)
    {
        return 1;
    }
    return f(x/2)+f(x%2);
}

void solve()
{
    long long n;
    cin>>n;
    long long ans=f(n);
     cout<<ans<<" ";
    cout<<(1LL<<ans)-1<<endl;
  //这个地方相当于ans^2-1
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}
全部评论

相关推荐

01-27 15:41
门头沟学院 Java
想躺平的菜鸡1枚:我项目比你难、学历比你好、还有SCI论文,投java都被拒一大片,现在基本上都要问点agent开发
软件开发投递记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务