CF743B Chloe and the sequence 题解 分治
题目链接:http://codeforces.com/problemset/problem/743/B
题目大意:
对于一个 n-序列,如果 n==0 ,那么它是一个空的序列(也就是说空序列中没有元素)。
然后会进行 i 次操作,每次操作,会在原序列末尾添加一次原序列,并且在两个原序列之间插入一个值为 i 的元素。
比如:
- 当 n == 0 时,0-序列为
[]
; - 当 n == 1 时,1-序列为
[] + 1 + [] = [ 1 ]
; - 当 n == 2 时,2-序列为
[ 1 ] + 2 + [ 1 ] = [ 1, 2, 1 ]
; - 当 n == 3 时,3-序列为
[ 1, 2, 1 ] + 3 + [ 1, 2, 1 ] = [ 1, 2, 1, 3, 1, 2, 1 ]
, - …………
现在我们的题目要求,给你一个 n-序列,求出它的第 k 个元素。
比如,3-序列 的 第 2 个元素是 2。
解题思路:
分治。一个 n-序列开一看成 一个 n-1-序列 + n + 一个n-1序列。
示例程序:
#include <bits/stdc++.h>
using namespace std;
int cal(int n, long long k) {
if (k == 1ll << n-1) return n;
return cal(n-1, k % (1ll << n-1));
}
int n;
long long k;
int main() {
cin >> n >> k;
cout << cal(n, k) << endl;
return 0;
}