题目
数列 如下定义:
- 是一个只含有 个 的长度为 的数列
- 是按照 的顺序连接得到
下面以 为例:
是由 连接得到,因为 是 个数 ,所以 是
是由 连接得到,所以 是
给出 和 ,输出 的第 个数。
限制:
- ,, 不超过 的长度。
注意 可能超过 位有符号整数类型范围,需要使用 位无符号整数类型。
算法分析
要找 的第 个数可化为 中的某数的问题
用递归
记 f(n, k)
表示返回 中第 个数的值
Sn-1 n Sn-1 前 中 后
设 L[n-1]
是 的长度
若 ,则说明在前面,返回 f(n-1, k)
若 ,则说明在后面,返回 f(n-1, k-L[n-1]-1)
若 ,则说明在正中间,返回
记 L[i]
表示 的长度
递推式:
通项:
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ull = unsigned long long; int main(){ int n; ull k; cin >> n >> k; vector<ull> l(n+1); rep(i, n) l[i+1] = 2*l[i] + 1; auto f = [&](auto& f, int n, ull k) -> int { if (k <= l[n-1]) return f(f, n-1, k); if (k >= l[n-1]+2) return f(f, n-1, k-l[n-1]-1); if (k == l[n-1]+1) return n; }; int ans = f(f, n, k); cout << ans << '\n'; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现