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

    000,001,011,010,110,111,101,100

    你会发现:
    前一半是0打头,后一半是1打头
    前一半顺序,后一半逆序
    去掉首位,后面同理
    改变顺序(逆序)只会影响后一位

    所以只需要:

    打个表
    判断位置
    注意顺序
    开long long 不见祖宗
    
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    const int maxn =1e6+7;
    #define scy(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
    inline unsigned long long read() {
      unsigned long long x=0,f=1;
      char ch=getchar();
      while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
      }
      while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
      }
      return x*f;
    }
    int main(){
        scy("in");
        unsigned long long n,k,m;
        bool v;//v是影响标记
        unsigned long long a[65];
        n=read(),k=read();
        	m=n;
        	a[0]=1;
        	for(int i=1;i<=64;i++) a[i]=a[i-1]+a[i-1];//打表
        	for(int i=1;i<=n;i++)
        	{
        		m--;
        		if(k<a[m])//在前面
        		{
        			printf("%d",v);
        			v=0;
        		}
        		else //在后面
        		{
        			if(v) printf("0");
        			else
        			{
        			printf("1");
        				v=1;
        			}
        			k-=a[m];
        		}
        	}
        	return 0;
        }
    
  • 相关阅读:
    布局
    JS基础回顾_滚动条
    JS基础回顾_Dom
    JS语法_其他
    JS语法_类型
    一些免费的API
    CSS特效(一)
    博客园在Markdown中使用JS
    C# 聊一聊屏保的设置 第一步 注册表
    2019 力扣杯-全国高校春季编程大赛 最长重复子串
  • 原文地址:https://www.cnblogs.com/scy-fisheep/p/13802962.html
Copyright © 2011-2022 走看看