提供翻译
查看原帖
提供翻译
735713
Azure_F楼主2024/1/11 21:40

来源:《算法竞赛入门经典(第二版)》,刘汝佳。

你的任务是压缩一个字符串。在压缩串中,$[S]k$ 表示 $S$ 重复 $k$ 次,$[S]k \left\{S_1\right\}t_1 \left\{S_2\right\}t_2 \cdots \left\{S_r\right\}t_r$($1 \le t_i \lt k$,$t_i \le t_{i + 1}$)表示 $S$ 重复 $k$ 次,然后在其中第 $t_i$ 个 $S$ 后面插入 $S_i$。这里的 $S$ 称为压缩单元。压缩是递归进行的,因此上面的 $S, S_1, S_2, \cdots$ 也可以是压缩串。你的任务是使得压缩串的长度最小。

例如,$\texttt{I\_am\_WhatWhat\_is\_WhatWhat}$ 的最优压缩结果是 $\texttt{I\_am[What]4\{\_is\_\}2}$。注意,上述 $k, t_1, t_2, \cdots$ 的长度均算作 $1$,即使它们的十进制中包含超过 $1$ 个数字。一个递归压缩的例子是 $\texttt{aaaabaaaaaaaabaaaaaaaabaaaa}$,最优结果是 $\texttt{[[a]8\{b\}4]3}$,长度为 $11$。

输入包含不超过 $20$ 组数据。每组数据包含不超过 $200$ 个可打印字符,但不含空白字符、括号(小括号 $\texttt{()}$、方括号 $\texttt{[]}$ 或者花括号 $\texttt{\{\}}$ 都算括号)或者数字。字母是大小写敏感的。

对于每组数据,输出长度和压缩串。如果有多解,任意输出一个压缩串即可。
2024/1/11 21:40
加载中...