P15337 [GCPC 2025] Jumbled Packets(通信题,暂时无法评测)

题目描述

由于技术和太空探索的不断进步,人类向比以往更多的行星和卫星发送探测器。其中一个探测器目前位于火卫一(Phobos)上,这是火星的两个卫星之一。该探测器将二进制数据传回地球,但只能在每几小时内的短时间窗口内进行。其快速的轨道、较小的体积以及靠近火星的位置,意味着火星大部分时间会物理上挡在探测器和地球之间,从而阻挡无线电波。在一个数据传输的时间窗口内,会传输一个包含 $n$ 个二进制位的大数据包,正好是时间窗口内可能传输的量。 探测器已经部署了几年,因此机械问题开始累积。最近一个非常麻烦的变化是机载时钟不可靠,很可能是由于温度大幅频繁波动(范围约为 $-112^\circ$ 到 $-4^\circ$ 摄氏度)引起的。结果,探测器在错误的时间(即无线电波无法到达地球时)传输数据包。为了缓解这个问题,探测器现在连续多次发送其数据包。 尽管这导致地球收到了 $n$ 位数据,但研究人员无法确定数据包的起始和结束位置,使得数据毫无用处。接收到的数据由一个可能为空的后缀,后跟发送数据的前缀组成,总长度恰好为 $n$ 位。例如,如果原始数据包是 “**00101001**”,则接收到的数据可能是 “**00100101**”(颜色仅用于视觉辅助)。 你需要编写软件,在传输前将数据编码为相同长度的消息,使得在接收到损坏的数据包后能够将其解码。幸运的是,工程部门改进了接收天线的设计,提高了信噪比,现在你可以在无线电传输中使用由三个可区分符号组成的字母表,而不是只有两个。 对于每个测试用例,你的程序将运行两次。第一次运行中,你的程序将获得一个二进制字符串进行编码。第二次运行中,你的程序将获得第一次运行中你输出的编码字符串,该字符串可能已按上述方式修改。你需要解码此字符串,以恢复第一次运行中的输入。 提供了一个测试工具来帮助开发你的解决方案。

输入格式

输入包含: - 一行,内容为 “Encode” 或 “Decode”,表示你要执行的操作。 - 一行,一个整数 $n$($1 \leq n \leq 10^5$),数据包的大小。 - 一行,一个长度为 $n$ 的字符串 $s$,即数据包。 在编码阶段,该字符串由符号 ‘0’ 和 ‘1’ 组成。 在解码阶段,该字符串将是你的三进制字符串的一个循环旋转。换句话说,这个字符串是你在编码阶段输出的字符串,但可能经过修改,以反映该数据包在地球上可能被接收的方式,如题目所述。

输出格式

在编码阶段,输出长度为 $n$ 的编码字符串,使用符号 ‘0’、‘1’ 和 ‘2’。 在解码阶段,输出原始的二进制字符串,即编码阶段的数据包。

说明/提示

#### 样例 1 解释 在第一个样例中,编码的三进制字符串 “002” 被接收为 “200”。 #### 样例 2 解释 在第二个样例中,编码的三进制字符串被完全按照编码的方式接收。 翻译由 DeepSeek 完成