题库练习 Encode and Decode (Easy Version)
← 上一题 下一题 →

A16739 | Encode and Decode (Easy Version)

时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

这是该题目的简单版本。不同之处在于本版本中 $a_i \leq 26$。

这是一个双次运行(通信)问题。在这类问题中,你的程序将被运行两次。两次运行之间,存储在内存中的所有变量都会丢失,但第一轮运行中提供给你的信息对你在第二轮正确解题可能很重要。因此,核心挑战是找到一种可以利用有限输出在两次运行中进行通信的策略。

时间限制和内存限制不会在两次运行之间共享。例如,本题中时间限制为 $2$ 秒,你只会在某一轮运行超过 $2$ 秒时收到超时的判决;但每轮运行时长为 $1.5$ 秒也是允许的。

在本题中,你的任务是设计一种方法,实现对长度为 $n$ 的数组 $a$ 的编码和解码。

第一次运行即编码阶段。你会被评测器给定 $n$ 和数组 $a$ 的内容。你的任务是将该数组编码成一个仅包含小写英文字符的字符串 $s$,并把 $s$ 返回给评测器。然后,程序终止,所有内存中的变量都会丢失。

第二次运行即解码阶段。你会被评测器给定字符串 $s$(即你第一次运行时输出的字符串)。你的任务是解码出 $s$,并还原最初评测器给定的 $n$ 和数组 $a$。换句话说,你需要反向还原你第一次编码时的算法。

第一次运行

你的代码会在每个测试用例上被执行两次。第一轮需要进行编码操作。

输入

第一行输入为字符串 first。这样你的程序就可以判断当前为第一次运行,需要执行编码算法。

第二行为一个整数 $n$($1 \le n \le 10^4$),表示数组 $a$ 的长度。

第三行为 $n$ 个由空格分隔的整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 26$)。

输出

当你准备好传递 $s$ 时,按下面的格式输出:

- $s$,即编码后的字符串($1 \leq |s| \leq 10^5$,其中 $|s|$ 为 $s$ 的长度)。该字符串只能包含小写英文字母,且输出时不带空格。

此后程序应该立即终止。注意所有内存中的变量都会丢失。

第二次运行

你的代码将执行解码操作。

输入

第一行为字符串 second。这样你的程序就可以识别出这是第二次运行,需要执行解码算法。

第二行为字符串 $s$,即你第一次运行时输出并传递给评测器的字符串。

输出

当你准备好还原出原始的 $n$ 和数组 $a$ 时,按如下格式输出:

- $n\, a_1\, a_2\, \ldots\, a_n$,原数组的长度以及数组本身。

输入格式

第一次运行(编码):

- 第一行:字符串 first
- 第二行:一个整数 $n$
- 第三行:$n$ 个整数 $a_1 \ a_2 \ldots a_n$

第二次运行(解码):

- 第一行:字符串 second
- 第二行:字符串 $s$

输出格式

第一次运行:

- 输出仅包含小写英文字母的字符串 $s$,不带空格。

第二次运行:

- 输出 $n\ a_1\ a_2\ \ldots\ a_n$,各整数之间用空格分隔。

输入输出样例

输入 #1
first
5
1 2 3 4 5
输出 #1
whileloop
C++ 编辑器
输入
输出