zoukankan      html  css  js  c++  java
  • P5657 格雷码

    思路

    考场上的递归思路

    每次向下递归的时候判断是左半边还是右半边即可
    注意向右半边递归之后下一层序列要反转过来即可

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <iostream>
    using namespace std;
    void solve(unsigned long long n,unsigned long long k,unsigned long long rev=0){
        if(rev)
            k=((1ULL<<(n))-1)-k;
        // cout<<n<<' '<<k<<' '<<rev<<endl<<endl;
        if(n==1){
            if(k==0)
                printf("0");
            else
                printf("1");
            return;
        }    
        if(k>((1ULL<<(n-1))-1)){
            printf("1");
            solve(n-1,k-((1ULL<<(n-1))),1);
        }
        else{
            printf("0");
            solve(n-1,k,0);
        }
    }
    unsigned long long n,k;
    int main(){
        cin>>n>>k;
        solve(n,k);
        return 0;
    }
    
  • 相关阅读:
    字符串分割并按大小排序
    为人之气
    RMQ
    线段树
    算法中的数学
    动态规划(DP)
    图的表示
    广度优先搜索(BFS)
    深度优先搜索(DFS)
    MyBatis(3.2.3)
  • 原文地址:https://www.cnblogs.com/dreagonm/p/11873923.html
Copyright © 2011-2022 走看看