髻
[CSP-S2019] 格雷码 - 洛谷 看到题肯定是找规律
#include<bits/stdc++.h>
using namespace std;
//const int maxn = 1E9;
int d[4] = {0,1,1,0};
#define ull unsigned long long
int main(){
ull n,k,one=1;
cin>>n>>k;
/*
ull num=one<<(n-1);//如果直接写1<<(n-1)计算过程中就溢出了
for(int i=n-1;i>=0;i--,num>>=1){
ull loop=k/num;
int order=(int)(loop%4);
printf("%d",d[order]);
}
//从低到高位的特殊循环节
//0110第1位规律
//00111100第2位规律
//i 01234567
//i/2 00112233 下标选择从0开始,/巧妙计算循环节,%4提取出来正好满足0110序列
//0000111111110000 第3位规律
*/
for(int i=n-1;i>=0;i--){
ull loop=k>>i;
int order=loop&3;//3就是二进制的11,就是取后两位
printf("%d",d[order]);
}
return 0;
}
发