NC15979 小q的数列
题目
题目描述
小q最近迷上了各种好玩的数列,这天,他发现了一个有趣的数列,其递推公式如下:
现在,他想考考你,问:给你一个 ,代表数列的第 项,你能不能马上说出 的值是多少,以及 所代表的值第一次出现在数列的哪一项中?
输入描述
输入第一行一个
随后 行,每行一个数 ,代表你需要求数列的第 项,和相应的
输出描述
输出每行两个正整数
和 ,以空格分隔
示例1
输入
2 0 1
输出
0 0 1 1
题解
知识点:递归,数学。
按公式递归求值不难,接下来证明求最小 。
若把 看成二进制,公式可理解为 ,即对于每位如果为 则加 ,因此 的结果是 二进制位为 的数量。那么一个数 , 与 相同而且要最小,只要把 个 从低位到高位排列,就能构造 。所以, 。
时间复杂度
空间复杂度
代码
#include <bits/stdc++.h> using namespace std; int f(long long n) { if (n == 0 || n == 1) return n; return f(n / 2) + f(n % 2); } int main() { int t; cin >> t; while (t--) { long long n; cin >> n; int ans = f(n); cout << ans << ' ' << ((1LL << ans) - 1) << '\n'; } return 0; }
本文来自博客园,作者:空白菌,转载请注明原文链接:https://www.cnblogs.com/BlankYang/p/16403229.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧