#P5657. [CSP-S 2019] 格雷码
[CSP-S 2019] 格雷码
P5657 [CSP-S 2019] 格雷码
题目背景
本题围绕“[CSP-S 2019] 格雷码”所描述的场景展开。普通字典序下,所有 位二进制串按数值从小到大排列。
下面的题面采用非逐字重述方式整理,但保留原题中的全部判定条件、边界含义、输入输出要求与特殊约定。
题目描述
普通字典序下,所有 位二进制串按数值从小到大排列。格雷码则是一种特殊排列:任意相邻两个串恰好有一位不同,并且第一个串和最后一个串也视为相邻。
本题规定使用下面的递归方式生成格雷码:
- 位格雷码依次为
0、1; - 已知 位格雷码后,构造 位格雷码:
- 前 个串:把原 位格雷码按原顺序排列,并在每个串前加
0; - 后 个串:把原 位格雷码按逆序排列,并在每个串前加
1。
- 前 个串:把原 位格雷码按原顺序排列,并在每个串前加
例如:
- 位格雷码:
00 01 11 10; - 位格雷码:
000 001 011 010 110 111 101 100。
按照上述顺序,把 位格雷码的 个串编号为 。
给定 和编号 ,请输出第 个 位格雷码串。
完整规则与任务要求
处理本题时,必须同时满足下列全部要求,不能只实现其中一部分:
- 普通字典序下,所有 位二进制串按数值从小到大排列。
- 格雷码则是一种特殊排列:。
- 任意相邻两个串恰好有一位不同,并且第一个串和最后一个串也视为相邻。
- 本题规定使用下面的递归方式生成格雷码:。
-
- 位格雷码依次为
0、1;。
- 位格雷码依次为
-
- 已知 位格雷码后,构造 位格雷码:。
- 前 个串:。
- 把原 位格雷码按原顺序排列,并在每个串前加
0;。 - 编号从 开始。
- 输出必须恰好包含 位,不足的高位必须保留为
0。 - 格雷码顺序严格使用题面给出的反射递归定义。
程序应完整读取“输入格式”中规定的所有数据,并严格按照“输出格式”给出结果。题目中的区间端点、编号起点、排序优先级、同分处理、空结构处理、取模方式和特殊字符串,均以本题面明确写出的规则为准。
所有算法还必须覆盖“数据范围”中的最小规模、最大规模及边界情况,不能只针对样例或小数据。
输入格式
一行输入两个整数 。
输出格式
输出一行一个长度恰好为 的二进制串,表示编号为 的格雷码。
样例 1
2 3
10
样例 2
3 5
111
样例说明
样例编号从 开始,在题面规定的反射格雷码序列中定位后,输出固定长度的二进制串。
数据范围
- 对于 的数据:;
- 对于 的数据:;
- 对于 的数据:;
- 对于全部数据:,。
当 时, 可能达到无符号 位整数的范围。
题目信息来源:洛谷 P5657。
边界与子任务说明
- 测试数据可能覆盖题面允许的最小值、最大值、重复值、空结果、无解或极端结构等边界情形。
- 若原题未额外列出分档子任务,则所有测试点统一遵守上述完整数据范围;若题面已经列出比例或分档条件,则这些条件均应视为题面的一部分。
- 不能根据公开样例推断未写出的额外限制。
本题面依据洛谷 P5657 的公开题目信息重新整理,为内容完整的非逐字重述版。
粤公网安备44195502000195号