[CSP-S 2019]格雷码

题目大意:

格雷码(Gray Code)是一种特殊的 \(n\) 位二进制串排列法,它要求相邻的两个二进制串间恰好有一位不同,特别地,第一个串与最后一个串也算作相邻。

\(n\) 位格雷码不止一种,下面给出其中一种格雷码的生成算法:

  1. \(1\) 位格雷码由两个 \(1\) 位二进制串组成,顺序为:\(0\),\(1\)。
  2. \(n+1\) 位格雷码的前 \(2^n\) 个二进制串,可以由依此算法生成的 \(n\) 位格雷码(总共 \(2^n\) 个 \(n\) 位二进制串)按顺序排列,再在每个串前加一个前缀 \(0\) 构成。
  3. \(n+1\) 位格雷码的后 \(2^n\) 个二进制串,可以由依此算法生成的 \(n\) 位格雷码(总共 \(2^n\) 个 \(n\) 位二进制串)按逆序排列,再在每个串前加一个前缀 \(1\) 构成。

综上,\(n + 1\) 位格雷码,由 \(n\) 位格雷码的 \(2^n\) 个二进制串按顺序排列再加前缀 \(0\),和按逆序排列再加前缀 \(1\) 构成,共 \(2^{n+1}\) 个二进制串。另外,对于 \(n\) 位格雷码中的 \(2^n\) 个 二进制串,我们按上述算法得到的排列顺序将它们从 \(0 \sim 2^n - 1\) 编号。

现在给出 \(n\),\(k\),请你求出按上述算法生成的 \(n\) 位格雷码中的 \(k\) 号二进制串。

\(1\le n\le 64, 0<k<2^n\)

思路:

从\(n-1\)到\(0\)确定每一位。若\(k\)的当前位为\(1\),则对应的格雷码该位也为\(1\),并将\(k\)剩下未处理的位取反;若\(k\)的当前位为\(1\),则对应的各类吗改为也为\(0\),不取反。

源代码:

#include<cstdio>
#include<cctype>
typedef unsigned long long uint64;
inline uint64 getint() {
register char ch;
while(!isdigit(ch=getchar()));
register uint64 x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
int main() {
freopen("code.in","r",stdin);
freopen("code.out","w",stdout);
const int n=getint();
uint64 k=getint();
for(register int i=n-1;i>=0;i--) {
const bool cur=(k>>i)&1;
putchar(cur?'1':'0');
if(cur) k=~k;
}
puts("");
return 0;
}

最新文章

  1. Spring JPA Junit 关闭自动回滚
  2. 40. Interleaving String
  3. 看来是要改用Gecko的节奏,放弃Awesomium吧
  4. 1008. Image Encoding(bfs)
  5. java小经验
  6. jenkin系列_调度jmeter实现分布式测试
  7. Altium中Fill,Polygon Pour,Plane的区别和用法
  8. zoj 3659 并检查集合
  9. Linux安装mysql 在/etc下没有my.cnf 解决办法
  10. SpringMVC 框架系列之初识与入门实例
  11. LESS学习笔记 —— 入门
  12. java常用工具(jps等)说明
  13. 使用seaborn探索泰坦尼克号上乘客能否获救
  14. XVI Open Cup named after E.V. Pankratiev. GP of Ekaterinburg--I.Iron man
  15. js 数组、对象转json 以及json转 数组、对象
  16. swift4.0 对 afn 进行二次封装
  17. jQuery事件--change([[data],fn])、on(events,[selector],[data],fn)和hover([over,]out)
  18. ID基本操作(标尺,参考线,网格)5.11
  19. python的基础socket知识
  20. matlab中的knn函数

热门文章

  1. python ---升级所有安装过的package
  2. 常用正则表达式和一些demo
  3. Parameter 0 of method sqlSessionTemplate in org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration required a single bean, but 2 were found:
  4. 【开发工具】- 推荐一款好用的文本编辑器[Sublime Text]
  5. 全选全不选案例table表格
  6. vue创建项目(推荐)
  7. VUE基础回顾6
  8. Linux内核同步机制之completion
  9. Java开发环境之MySql
  10. 【Docker】docker安装Jenkins