CFCF2168A2.Encode and Decode (Hard Version)
普及-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是本题的高难度版本。不同之处在于本版本中 ai≤109。
这是一道运行两次(通信)题。在这类题目中,你的程序会运行两次。两次运行间,存储在内存中的所有变量都会丢失,但在第一次运行中给你的信息,可能对你正确解决第二次运行至关重要。因此,主要的挑战在于采用一定策略,在两次运行间利用你能输出的有限内容进行信息传递。
时间限制和内存限制在两次运行之间不会共享。例如,在本题中,因为时间限制为 2 秒,你只会在任一轮运行超时才会得到 TLE 判定,但如果两次你的程序各耗时 1.5 秒,也是没有问题的。
在本题中,你需要找到一种策略,对一个大小为 n 的数组 a 进行编码和解码。
第一次运行为编码阶段。你将获得 n 和 a 的元素,由评测机给出。你的任务是将这个数组编码为仅包含小写英文字母的字符串 s,并将 s 返回给评测机。然后你的程序终止,内存中所有变量都会丢失。
第二次运行为解码阶段。你将获得由评测机给出的字符串 s(与第一次输出的字符串相同),你的任务是对 s 进行解码,还原原本的 n 以及数组 a。也就是说,你需要逆转第一次的编码算法。
第一次运行
你的代码将在每个测试点上正好运行两次。第一次运行时,你需要进行编码操作。
输入格式
第一行输入字符串 first。此行用于让你的程序识别这是第一次运行,应作为编码算法处理。
第二行输入一个整数 n,表示 a 的长度,满足 1≤n≤104。
第三行输入 n 个用空格分隔的整数 a1,a2,…,an,其中 1≤ai≤109。
输出格式
准备好传递字符串 s 后,请按如下输出:
- s,即编码后的字符串(1≤∣s∣≤105,其中 ∣s∣ 表示 s 的长度)。该字符串应仅包含英文小写字母,且中间不包含空格。
输出完毕后,程序应立即终止。请注意,所有内存变量都将在两次运行之间丢失。
第二次运行
在第二次运行时,你需要执行解码操作。
输入格式
第一行输入字符串 second。用于让你的程序识别这是第二次运行,应作为解码算法处理。
第二行输入字符串 s,即你在第一次运行中传递给评测机的字符串变量。
输出格式
还原原始的 n 和数组 a 后,请按如下格式输出:
- n a1 a2 … an,即原始数组的长度以及所有数组元素。
输入输出样例
输入#1
first 5 100 200 300 400 500
输出#1
skibidi
说明/提示
两个示例用于演示同一测试点的两次运行。
第一次运行时,评测机给出 n=5,a=[100,200,300,400,500]。读取输入后,你通过自己的编码算法决定编码字符串 s 为 skibidi。输出 s 给评测机,程序终止,所有存储在内存中的内容都将丢失,进入第二次运行。
第二次运行时,评测机给出 s=skibidi。读取输入后,你使用自己的解码算法,成功还原出原来的 n=5 和 a=[100,200,300,400,500]。你将其输出,评测机会检查其是否与最初数据一致。若一致,则此测试通过。
这些示例未必展示了最优的编码解码算法。