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

A16741 | Encode and Decode (Hard Version)

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

题目描述

这是本题的高难度版本。不同之处在于本版本中 $a_i \leq 10^9$。

这是一道运行两次(通信)题。在这类题目中,你的程序会运行两次。两次运行间,存储在内存中的所有变量都会丢失,但在第一次运行中给你的信息,可能对你正确解决第二次运行至关重要。因此,主要的挑战在于采用一定策略,在两次运行间利用你能输出的有限内容进行信息传递。

时间限制和内存限制在两次运行之间不会共享。例如,在本题中,因为时间限制为 $2$ 秒,你只会在任一轮运行超时才会得到 TLE 判定,但如果两次你的程序各耗时 $1.5$ 秒,也是没有问题的。

在本题中,你需要找到一种策略,对一个大小为 $n$ 的数组 $a$ 进行编码和解码。

第一次运行为编码阶段。你将获得 $n$ 和 $a$ 的元素,由评测机给出。你的任务是将这个数组编码为仅包含小写英文字母的字符串 $s$,并将 $s$ 返回给评测机。然后你的程序终止,内存中所有变量都会丢失。

第二次运行为解码阶段。你将获得由评测机给出的字符串 $s$(与第一次输出的字符串相同),你的任务是对 $s$ 进行解码,还原原本的 $n$ 以及数组 $a$。也就是说,你需要逆转第一次的编码算法。

## 第一次运行

你的代码将在每个测试点上正好运行两次。第一次运行时,你需要进行编码操作。

##

输入格式

第一行输入字符串 first。此行用于让你的程序识别这是第一次运行,应作为编码算法处理。

第二行输入一个整数 $n$,表示 $a$ 的长度,满足 $1 \le n \le 10^4$。

第三行输入 $n$ 个用空格分隔的整数 $a_1, a_2, \ldots, a_n$,其中 $1 \le a_i \le 10^9$。

##

输出格式

准备好传递字符串 $s$ 后,请按如下输出:

- $s$,即编码后的字符串($1 \le |s| \le 10^5$,其中 $|s|$ 表示 $s$ 的长度)。该字符串应仅包含英文小写字母,且中间不包含空格。

输出完毕后,程序应立即终止。请注意,所有内存变量都将在两次运行之间丢失。

## 第二次运行

在第二次运行时,你需要执行解码操作。

### 输入格式

第一行输入字符串 second。用于让你的程序识别这是第二次运行,应作为解码算法处理。

第二行输入字符串 $s$,即你在第一次运行中传递给评测机的字符串变量。

### 输出格式

还原原始的 $n$ 和数组 $a$ 后,请按如下格式输出:

- $n\ a_1\ a_2\ \ldots\ a_n$,即原始数组的长度以及所有数组元素。

输入输出样例

输入 #1
first
5
100 200 300 400 500
输出 #1
skibidi
C++ 编辑器
输入
输出