zoukankan      html  css  js  c++  java
  • 【解题报告】CSP2019-S D1T1 格雷码

    题目链接:https://www.luogu.org/problem/P5657

    话说这道题怎么是道橙题啊。

    基本思路

    1. 因为n位格雷码的前2n-1位就是n-1位格雷码前面加了一位‘0’,所以可以把它们近似的看作和n-1位格雷码相同
    2. 寻找第k位格雷码是通过哪一个格雷码得出的,以4位格雷码为例,因为第10号格雷码是由5号的前面加了“1”得到的,所以10号与5号对应  
    3. 如果k小于2n-1,即最高位为0,它与本身对应
    4. 按上述方法求出在n-1位格雷码中刚才算出的对应编号的值,然后在前面加上“0”或“1”
    5. 因为数据范围位264,所以要用 unsigned long long 。

    代码:

    #include <bits/stdc++.h>
    #define ull unsigned long long
    using namespace std;
    
    int n, n1, n2, shuzu[10086];
    ull k;
    
    ull mypow(int a, int b){
        ull ans=1;
        for(int i=0; i<b; i++) ans*=a;
        return ans;
    }
    
    void digui(ull x){
        if(x==0){
            shuzu[0]=0;
            return;
        }
        else if(x==1){
            shuzu[0]=1;
            return;
        }
        else{
            if(x>=n1/2){
                n--;
                n1/=2;
                shuzu[n]=1;
                digui(mypow(2, n+1)-x-1);
            }
            else{
                n--;
                n1/=2;
                shuzu[n]=0;
                digui(x);
            }
        }
    }
    
    int main(){
        scanf("%d %llu", &n, &k);
        n2=n;
        n1=mypow(2, n);
        digui(k);
        for(int i=n2-1; i>=0; i--){
            printf("%d", shuzu[i]);
        }
    
        return 0;
    }

    果然还是爆栈了。。

  • 相关阅读:
    线性回归
    [C0] 引言(Introduction)
    [C5W2] Sequence Models
    [C5W3] Sequence Models
    [C4W4] Convolutional Neural Networks
    [C4W3] Convolutional Neural Networks
    [C4W2] Convolutional Neural Networks
    折腾ELK+kafka+zk
    helm 安装prometheus operator 并监控ingress
    练习calico的网络policy
  • 原文地址:https://www.cnblogs.com/dong628/p/11872902.html
Copyright © 2011-2022 走看看