#387. [通信] 编码与解码

[通信] 编码与解码

题目描述

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

数组元素满足 1≤ai≤261 \leq a_i \leq 26。两次运行的时间和内存限制分别计算;任意一次运行超过限制都会导致超时。 第一次运行:编码

输入分为三行:

  • 第一行为字符串 firstfirst,表示当前是第一次运行。
  • 第二行为整数 nn,表示数组长度,满足 1≤n≤1041 \leq n \leq 10^4。
  • 第三行为 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n,满足 1≤ai≤261 \leq a_i \leq 26。

请将数组编码为一个仅包含小写英文字母的字符串 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
1 2 3 4 5
whileloop
second
whileloop
5
1 2 3 4 5

样例说明

第一次运行中,输入数组为 1,2,3,4,51,2,3,4,5。一种编码方式是输出 whileloopwhileloop。 第二次运行时,输入会包含 whileloopwhileloop。程序应解码并输出: 5 1 2 3 4 5 样例只展示了一种可行的编码方式,不代表最优方案。