• CF743B Chloe and the sequence 题解 递归


    题目链接:http://codeforces.com/problemset/problem/743/B

    题目描述

    灵灵最近发明了一个序列,他称他的序列为 (n-)序列。
    对于一个 (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)(k)(1 le n le 50, 1 le k lt 2^n) )。

    输出格式

    输出 (n-) 序列 中的第 (k) 个元素的值。

    样例输入1

    3 2
    

    样例输出1

    2
    

    样例输入2

    4 8
    

    样例输出2

    4
    

    样例解释

    对于样例1,一个 (3-) 序列 ([1, 2, 1, 3, 1, 2, 1]) 的第 (2) 个元素是 (2)
    对于样例2,一个 (4-) 序列 ([1, 2, 1, 3, 1, 2, 1, 4, 1, 2, 1, 3, 1, 2, 1]) 的第 (8) 个元素是 (4)

    样例分析

    这道题目是一道非常经典的递归的题目。
    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 51;
    
    int n, ans;
    long long k, f[maxn];
    
    void init() {
        f[1] = 1;
        for (int i = 1; i < maxn; i ++) f[i] = f[i-1] * 2 + 1;
    }
    
    void solve(int n, long long k) {
        if (k == f[n-1] + 1) ans = n;
        else if (k <= f[n-1]) solve(n-1, k);
        else solve(n-1, k - f[n-1] - 1);
    }
    
    int main() {
        init();
        cin >> n >> k;
        solve(n, k);
        cout << ans << endl;
        return 0;
    }
    
  • 相关阅读:
    可变参数的实现方式
    VC 链接没有 lib 文件的 dll
    Nginx使用笔记1
    实现linux 中c 函数popen( ),pclose( ); 进程通信、匿名管道
    线程池
    vue相关
    maven学习
    ES6相关
    spring boot相关
    sql 重复、替换、截取、去空格、去小数点后的位数、日期格式转换
  • 原文地址:https://www.cnblogs.com/quanjun/p/12206352.html
Copyright © 2020-2023  润新知