尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
UVa 11663 Gray Inc
题目描述Gray Inc.\texttt{Gray Inc.}Gray Inc.是一家专门从事Gray\texttt{Gray}Gray码管理的软件公司。一个nnn位二进制码n≥1n \ge 1n≥1是一个由单词w0,w1,…w_0, w_1, \ldotsw0​,w1​,…组成的序列该序列包含所有可能的nnn位二进制单词。一个nnn位Gray\texttt{Gray}Gray码是一个nnn位二进制码使得任意两个连续单词之间恰好只有一位发生变化。Gray Inc.\texttt{Gray Inc.}Gray Inc.按下述方式生成其特有的Gray\texttt{Gray}Gray码记生成的nnn位Gray\texttt{Gray}Gray码为GnG_nGn​G10,1 G_1 0, 1G1​0,1Gn0Gn−1, 1Gn−1R(n≥2) G_n 0G_{n-1},\; 1G_{n-1}^{R} \quad (n \ge 2)Gn​0Gn−1​,1Gn−1R​(n≥2)其中bAbAbA将比特bbb附加到序列AAA中每个元素的前面ABABAB连接序列AAA与BBBARA^RAR序列AAA的逆序。GnG_nGn​不仅是Gray\texttt{Gray}Gray码而且是循环Gray\texttt{Gray}Gray码即第一个单词视为最后一个单词的后继。问题给定GnG_nGn​中的一个二进制单词www和一个自然数mmm求在循环顺序中位于www之后第mmm个位置的单词。输入格式输入包含若干测试用例每个用例一行包含一个整数mmm0m≤10000 m \le 10000m≤1000和一个二进制串www两者由一个空格分隔。www的长度nnn满足1≤n≤1001 \le n \le 1001≤n≤100。输入以一行0 0结束。输出格式对于每个测试用例输出一行即对应的nnn位二进制单词。样例输入1 0 3 0 1 1 1 11 6 011 123 010101010 0 0输出1 1 0 10 000 111100100题目分析本题给出的GnG_nGn​正是经典的二进制反射Gray\texttt{Gray}Gray码Binary Reflected Gray Code\texttt{Binary Reflected Gray Code}Binary Reflected Gray Code。若用索引kkk从000到2n−12^n - 12n−1表示序列中的位置则对应的Gray\texttt{Gray}Gray码单词为Gray(k)k⊕(k≫1) \text{Gray}(k) k \oplus (k \gg 1)Gray(k)k⊕(k≫1)反之给定Gray\texttt{Gray}Gray码ggg其对应的原始索引kkk可通过如下递推恢复最高位kn−1gn−1k_{n-1} g_{n-1}kn−1​gn−1​对于in−2,n−3,…,0i n-2, n-3, \dots, 0in−2,n−3,…,0有kiki1⊕gik_i k_{i1} \oplus g_iki​ki1​⊕gi​。其中⊕\oplus⊕表示按位异或。由于nnn最大为1001001002n2^n2n远超任何内置整数类型的表示范围不能直接转换为整数进行加减运算。但mmm的值很小≤1000\le 1000≤1000因此我们可以直接在二进制串上模拟“加mmm”的操作模2n2^n2n然后重新编码为Gray\texttt{Gray}Gray码输出。解题思路1. 解码Gray\texttt{Gray}Gray码 → 二进制索引给定输入单词www即Gray\texttt{Gray}Gray码我们首先将其还原为原始索引的二进制表示BBB高位在前。根据递推式B[0]w[0]B[0] w[0]B[0]w[0]对iii从111到n−1n-1n−1B[i](B[i−1]−’0’)⊕(w[i]−’0’)B[i] (B[i-1] - \text{0}) \oplus (w[i] - \text{0})B[i](B[i−1]−’0’)⊕(w[i]−’0’)。该过程只需一次线性扫描复杂度O(n)O(n)O(n)。2. 循环加法我们需要在模2n2^n2n意义下对BBB加上mmm。由于m≤1000m \le 1000m≤1000可以重复mmm次“加111”操作每次从最低位串的末尾开始模拟二进制加法从右向左扫描遇到1则改为0并继续进位遇到第一个0则改为1并停止如果所有位都是1则全部变为0即模2n2^n2n回绕。每次加111的复杂度为O(n)O(n)O(n)总复杂度O(n⋅m)O(n \cdot m)O(n⋅m)对于n≤100n \le 100n≤100、m≤1000m \le 1000m≤1000来说完全可行。3. 编码二进制索引 →Gray\texttt{Gray}Gray码得到加mmm后的二进制索引B′BB′后将其重新编码为Gray\texttt{Gray}Gray码G′GG′G′[0]B′[0]G[0] B[0]G′[0]B′[0]对iii从111到n−1n-1n−1G′[i](B′[i]−’0’)⊕(B′[i−1]−’0’)G[i] (B[i] - \text{0}) \oplus (B[i-1] - \text{0})G′[i](B′[i]−’0’)⊕(B′[i−1]−’0’)。同样只需一次线性扫描。4. 正确性说明由于Gray\texttt{Gray}Gray码与二进制索引之间存在双射一一对应且循环顺序就是索引递增顺序模2n2^n2n因此先解码、加mmm、再编码的过程完全正确。所有的操作均在二进制串上进行避免了高精度整数的处理。复杂度分析每个测试用例解码和编码各需O(n)O(n)O(n)时间。加法部分重复mmm次每次O(n)O(n)O(n)故总时间复杂度为O(n⋅m)O(n \cdot m)O(n⋅m)。空间复杂度O(n)O(n)O(n)仅需存储二进制串和Gray\texttt{Gray}Gray码串。代码实现// Gray Inc// UVa ID: 11663// Verdict: Accepted// Submission Date: 2026-06-19// UVa Run Time: 0.000s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;// 格雷码解码为二进制索引串高位在前stringgrayToBinary(conststringgray){intn(int)gray.size();stringbin(n,0);bin[0]gray[0];for(inti1;in;i)bin[i]((bin[i-1]-0)^(gray[i]-0))0;returnbin;}// 二进制索引串编码为格雷码高位在前stringbinaryToGray(conststringbin){intn(int)bin.size();stringgray(n,0);gray[0]bin[0];for(inti1;in;i)gray[i]((bin[i]-0)^(bin[i-1]-0))0;returngray;}// 二进制串加 1模 2^n高位在前voidincrementBinary(stringbin){intn(int)bin.size();intin-1;while(i0bin[i]1){bin[i]0;--i;}if(i0)bin[i]1;// 若 i 0说明全 1 变为全 0已自动取模}intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intm;string w;while(cinmw){if(m0w0)break;string bingrayToBinary(w);for(intstep0;stepm;step)incrementBinary(bin);coutbinaryToGray(bin)\n;}return0;}总结本题的核心在于识别出GnG_nGn​就是标准的二进制反射Gray\texttt{Gray}Gray码从而直接利用Gray\texttt{Gray}Gray码与二进制索引之间的转换关系。由于nnn较大100100100不能使用内置整数类型但mmm很小通过模拟二进制加法即可高效地完成“向后移动”操作。该解法简洁时间复杂度与n⋅mn \cdot mn⋅m成正比完全满足题目限制。注意处理循环回绕当二进制串全为1时加111后变为全0正好对应循环Gray\texttt{Gray}Gray码的最后一个单词后继为第一个单词。
RELATED

相关推荐

Linux --- 共享内存

Linux --- 共享内存

在 Linux 进程间通信(IPC)的所有机制中,共享内存是理论带宽最高、延迟最低的方案,却也是最容易因为同步设计、生命周期管理、崩溃一致性考虑不周而埋下隐患的机制。一、本质:共享内存共享的是同一组物理内存页 共享内存…

📅 2026/10/29 21:27:10
2026全国足浴管理软件权威评测榜

2026全国足浴管理软件权威评测榜

2026年最新《全国足浴&康养门店管理软件综合实力评测榜单》正式发布。本次测评由足浴行业研究中心---中国足健会牵头,联合全国数千家足浴、SPA、采耳康养门店完成实景实测,围绕系统稳定性、防飞单风控、AI智能排钟、技师提成核算、公域核销能力、连锁…

📅 2026/10/22 10:50:19
Windows Docker环境搭建:从WSL虚拟化到Docker Desktop配置全指南

Windows Docker环境搭建:从WSL虚拟化到Docker Desktop配置全指南

1. 先搞清楚 WSL 和 Docker Desktop 的关系,别急着装如果你在 Windows 上想用 Docker,大概率会搜到 WSL(Windows Subsystem for Linux)。很多人第一步就卡住了,因为没理清它们之间的关系。简单说,WSL 不是 …

📅 2026/10/25 9:45:23
MORE NEWS

更多资讯

📰

ARTEX漏洞推送六渠道完整配置:钉钉、飞书、企业微信、Telegram与邮件实战

【免费下载链接】ARTEX Autumn-27/ARTEX 持续维护开源版本 项目地址: https://gitcode.com/gh_mirrors/artex/ARTEX 点击查看 免费下载 ARTEX 漏洞推送功能可以让每一次高危漏洞发现都第一时间送达你的 IM 群或邮箱。它内置了钉钉、飞书、企业微信、通用 Webhook、…

📰

Macro desktop-cef 深度解析:用 Chromium(CEF)为 macOS 构建 Tauri 桌面端

后端前端协同办公即时通讯企业应用CRMAI Agent人工智能 【免费下载链接】macro Macro is a unified workspace for teams: email, chat, docs, tasks, agents, calls, and CRM — -linked together with shared AI memory. 项目地址: https://gitcode.com/GitHub_Tr…

📰

BlueprintJS 选型与上手指南:React 数据密集型应用的桌面 UI 底座

BlueprintJS 选型与上手指南:React 数据密集型应用的桌面 UI 底座 【免费下载链接】blueprint A React-based UI toolkit for the web 项目地址: https://gitcode.com/gh_mirrors/bl/blueprint BlueprintJS 是 Palantir 出品的 React 组件库,定位…

📰

awesome-openclaw技能生态指南:ClawHub与5400+个Skills如何挑选与安装

【免费下载链接】awesome-openclaw A curated list of the best OpenClaw resources: official projects, skills, plugins, dashboards, deployment tooling, memory systems, and guides. 项目地址: https://gitcode.com/gh_mirrors/awe/awesome-openclaw 点击查看…

📰

从自动点到AI智能助手:ShizukuDhizuku-list自动化AI工具盘点,让手机替你干活

【免费下载链接】ShizukuDhizuku-list 一个收集支持Shizuku和Dhizuku的软件的项目 项目地址: https://gitcode.com/gh_mirrors/sh/ShizukuDhizuku-list 点击查看 免费下载 想让手机自动点签到、自动执行脚本,甚至用一句话"指挥"手机&#xff…

📰

WPF三种启动方式 + 静态资源 + 数据绑定 满分知识点整理

模块一:WPF应用程序三种启动方式(必考大题)1.1 三种方式核心对比(背诵)方式1:StartupUri 指定启动页(推荐、最常用)特点:XAML直接配置、写法最简、无需后台代码缺点&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬