当前位置: 首页 > backend >正文

Gray Code (格雷码)

题目:

思路:

这里有两个思路,如果我们不了解 gray code 这个东西那么我们如何去想?

由于这里数据小,其实我们可以使用图论的方式来写,当然也可以找规律构造,其实这属于方法二

图论:

我们给每个数都写出其二进制形式,然后探究其下一个 gray code 是谁,那么我们就可以根据其性质分析,由于我们只需要一位不同,那么直接异或每一位就能求出其下一个节点的可能,由于 n <= 16,那么我们一个节点最多只有 16 个节点,所以我们直接建图然后跑一遍即可,由于一定有解,所以直接模拟即可,1 << 16 约为 7e4,可过

构造:

根据性质,我们对于位置 i,我们对应的 gray code 就是 i ^ (i >> 1),具体证明不在本次讨论范围内

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
int n, mx;
string num[70000];
vector<vector<int>> g(70000);
string to2(int x)
{string ans;for (int i = n - 1; i >= 0; i--){ans += '0' + ((x >> i) & 1);}return ans;
}
int sonans[70000];
int vis[70000];
int over = 0;
void dfs(int fa, int len)
{if (over || len == mx+1){over = 1;return;}vis[fa] = 1;for (auto & son : g[fa]){if(vis[son] || over) continue;sonans[fa] = son;dfs(son,len + 1);}vis[fa] = 0;
}int graycode[70000];
void solve2()
{cin >> n;for (int i = 0; i < 1<<n; i++){graycode[i] = i ^ (i >> 1);cout << to2(graycode[i]) << endl;}  
}void solve()
{cin >> n;mx = pow(2, n) - 1;for (int i = 0; i <= mx; i++){num[i] = to2(i);for (int j = n - 1; j >= 0; j--){g[i].push_back(i ^ (1LL << j));}}dfs(0,1);int now = 0;while (now != -1){cout << num[now] << endl;now = sonans[now];}
}signed main()
{memset(sonans,-1,sizeof sonans);ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;while (t--){solve2();}return 0;
}

http://www.xdnf.cn/news/19155.html

相关文章:

  • 【机器学习入门】4.1 聚类简介——从“物以类聚”看懂无监督分组的核心逻辑
  • 【蓝桥杯 2024 省 Python B】缴纳过路费
  • 网格纹理采样算法
  • SEO关键词布局总踩坑?用腾讯云AI工具从核心词到长尾词一键生成(附青少年英语培训实操案例)
  • 文件,目录,字符串使用
  • 金仓数据库迁移评估系统(KDMS)V4正式上线,助力企业高效完成数据库国产化替代
  • Ubuntu 中通过 SSH 克隆 Windows 上的 Git 仓库
  • STFT和梅尔频谱图
  • Notepad++常用设置
  • Session
  • HunyuanVideo-Foley - AI视频配音 根据视频和文本描述生成逼真的电影级音频 支持50系显卡 一键整合包下载
  • uniapp解析富文本,视频无法显示问题
  • 网络初识及网络编程
  • WPF中的ref和out
  • Shell 秘典(卷三)——循环运转玄章 与 case 分脉断诀精要
  • 访问Nginx 前端页面,接口报502 Bad Gateway
  • 软考 系统架构设计师系列知识点之杂项集萃(137)
  • 如何在 Jenkins Docker 容器中切换到 root 用户并解决权限问题
  • 深入理解 RabbitMQ:从底层原理到实战落地的全维度指南
  • C++之stack类的代码及其逻辑详解
  • 基于DCT-FFT的图像去噪滤波算法
  • GD32入门到实战22--红外NEC通信协议
  • 超越传统SEO:用生成引擎优化(GEO)驱动下一轮增长
  • Tomcat 企业级运维实战系列(三):Tomcat 配置解析与集群化部署
  • UI前端大数据可视化实战策略:如何设计符合用户认知的数据可视化界面?
  • JUC并发编程10 - 内存(02) - volatile
  • vscode terminal远程连接linux服务器GUI图形界面
  • 鸿蒙NEXT布局全解析:从线性到瀑布流,构建自适应UI界面
  • 深入理解计算机端口:为什么通信需要端口?
  • 【读论文】质心重分配显微镜实现活样本超分辨成像