[递归] aw3695. 扩充序列(递归+模拟+找规律+aw周赛004_2)
Posted Ypuyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[递归] aw3695. 扩充序列(递归+模拟+找规律+aw周赛004_2)相关的知识,希望对你有一定的参考价值。
1. 题目来源
链接:3695. 扩充序列
相关链接:
2. 题目解析
忘记开 long long
,WA
三次。
一图胜千言,递归即可:
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)
迭代写法:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 52;
LL n, k;
LL a[N];
int main() {
a[1] = 1;
for (int i = 2; i <= n; i ++ ) a[i] = a[i - 1] * 2 + 1;
cin >> n >> k;
int c = 1; // k 所在的层数
while (a[c] < k) c ++ ;
while (k != (a[c] + 1) / 2) { // 下标从 1 开始
LL t = (a[c] + 1) / 2;
if (k < t) c -- ;
else {
c -- ;
k -= a[c] + 1;
}
}
cout << c << endl;
return 0;
}
递归写法:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 51;
int n;
LL k;
int dfs(int n, LL k) {
LL mid = 1ll << n - 1;
if (k == mid) return n;
if (k < mid) return dfs(n - 1, k);
return dfs(n - 1, k - mid);
}
int main() {
cin >> n >> k;
cout << dfs(n, k) << endl;
return 0;
}
以上是关于[递归] aw3695. 扩充序列(递归+模拟+找规律+aw周赛004_2)的主要内容,如果未能解决你的问题,请参考以下文章
python-027-递归-求序列最大值、计算第n个调和数、转换字符到整数