# 再来一小段题解 ## 解法比较 完整构造与按需输出是并列方案:完整构造减少递归与查找开销,按需输出避免保存最大字符串。标程采用按需输出。 出题人解法先读入所有询问,求出最大版本,逐次把当前串的指定前缀复制到尾部,实际构造最大版本。各版本互为前缀,所以每次询问只需输出这个大串相应长度的前缀。设最大版本号为 $V$ 、最大串长为 $L_{max}$ 、询问数为 $Q$ 、输出总字符数为 $C$ ,时间为 $O(V+Q+L_{max}+C)$ ,空间为 $O(L_{max}+V+Q)$ . Codex(GPT-6)采用的实现只保存初串和各版本长度,按拼接关系递归输出所需前缀;这种分解与完整构造中的实际复制完全等价。额外空间降为 $O(V+|s_1|)$ ,适合本题内存限制;时间上界为 $O(V+(C+Q)\log(V+1))$ .代价是递归和查找版本的开销,输出的 $C$ 个字符仍然必须逐个写出,按需输出的优势在于空间。 ## 先算长度 记 $L_k=|s_k|$ ,则 $$L_1=|s_1|,\qquad L_k=L_{k-1}+\left\lceil L_{k-1}/5\right\rceil$$ 用整数运算 `(L + 4) / 5` 实现向上取整。长度严格递增,而且每个版本都是后续版本的前缀。只需保存 70 个长度和最初的字符串。 ## 按前缀递归输出 定义 `PrintPrefix(t)` :输出任意一个长度至少为 $t$ 的版本的前 $t$ 个字符。由于较短的版本总是较长版本的前缀,选择哪个足够长的版本都不会影响结果。 - 若 $t\le L_1$ ,直接输出 $s_1$ 的前 $t$ 个字符。 - 否则二分找到最小的 $k$ ,使 $L_k\ge t$ ,此时有 $L_{k-1}L_1$ ,选出的最小版本 $k$ 满足 $L_{k-1}