CF743B Chloe and the sequence 题解 分治

发布时间 2023-03-27 23:50:15作者: quanjun

题目链接: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;
}