#388. [通信] 编码与解码2

[通信] 编码与解码2

题目描述

这是一道运行两次的通信题:程序会针对同一组测试数据运行两次。第一次运行时,程序需要把数组编码成字符串;第二次运行时,程序会收到这个字符串,需要还原数组。两次运行之间,程序内存中的变量会被清空,因此只能通过传递的字符串通信。

数组元素满足 1≤ai≤1091 \leq a_i \leq 10^9。

两次运行的时间和内存限制分别计算,每次运行的时间限制为 22 秒,内存限制为 512512 megabytes。

第一次运行:编码

输入分为三行:

  • 第一行为字符串 firstfirst,表示当前是第一次运行。
  • 第二行为整数 nn,表示数组长度,满足 1≤n≤1041 \leq n \leq 10^4。
  • 第三行为 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n,满足 1≤ai≤1091 \leq a_i \leq 10^9。 请将数组编码为一个仅包含小写英文字母的字符串 ss,并输出它。要求 1≤∣s∣≤1051 \leq |s| \leq 10^5,输出时不能包含空格。输出后程序结束。

第二次运行:解码

输入分为两行:

  • 第一行为字符串 secondsecond,表示当前是第二次运行。
  • 第二行为第一次运行时输出的字符串 ss。 请解码 ss,并输出原数组长度 nn 和数组 aa。

如果你不了解通信题,请阅读 https://codeforces.com/blog/entry/147996

题解可以参考 https://codeforces.com/blog/entry/148053

first
5
100 200 300 400 500
skibidi
second
skibidi
5
100 200 300 400 500

样例说明

第一次运行中,输入数组为 100,200,300,400,500100,200,300,400,500。示例中的程序采用某种编码方式,输出 skibidiskibidi。

第二次运行时,输入会包含 skibidiskibidi。程序应按照对应的解码规则还原数组,并输出:

5

100 200 300 400 500

样例只展示两次运行之间的信息传递,不代表最优方案。你可以自行设计其他编码方式。