传统题 1000ms 256MiB

压缩软件

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

最近,@hprogq\texttt{@hprogq} 遇到了一个大麻烦。由于长期囤积屎山代码,他的电脑硬盘容量条已经红得发紫。

为了腾出空间,他决定自己开发一个压缩软件。他想到了游程编码(Run-Length Encoding, RLE)。这是一种简单的无损压缩方法,其基本思想是将连续重复出现的字符替换为“重复次数+字符”的形式,例如:

  • 字符串 AAAAA\text{AAAAA} 可以被压缩为 5A\text{5A};
  • 字符串 HHHHHHPPPRRRROOOOOOOOGGGGGGGQQQQQ\text{HHHHHHPPPRRRROOOOOOOOGGGGGGGQQQQQ} 可以被压缩为 6H3P4R8O7G5Q\text{6H3P4R8O7G5Q};

然而,他在测试中发现了一个尴尬的问题:对于很短的连续字符,盲目使用标准 RLE\text{RLE} 反而会浪费空间。

  • 例如:原文 A\text{A}(11 字节),压缩后变成 1A\text{1A}(22 字节),变长了!
  • 例如:原文 AA\text{AA}(22 字节),压缩后变成 2A\text{2A}(22 字节),没变化!

为了追求极致的空间和时间利用率,@hprogq\texttt{@hprogq} 制定了一套 “智能游程编码” 规则:

  1. 统计连续出现的字符片段。
  2. 只有当压缩后的长度严格小于原文长度时,才进行压缩。
    • 这意味着,只有当连续字符的数量 ≥3\ge 3 时,才将其转换为 [数字][字符][\text{数字}][\text{字符}] 的形式。
    • 如果连续字符数量为 11 或 22,则保持原样输出。

例如:

$$\begin{array}{l l l} \text{AAAA} & \rightarrow & \text{4A} \quad (4\text{ 字节变为 }2\text{ 字节,赚了}) \\ \text{BBB} & \rightarrow & \text{3B} \quad (3\text{ 字节变为 }2\text{ 字节,赚了}) \\ \text{CC} & \rightarrow & \text{CC} \quad (2\text{ 字节变为 }2\text{ 字节,不压}) \\ \text{D} & \rightarrow & \text{D} \quad (1\text{ 字节变为 }2\text{ 字节,亏了,不压}) \end{array}$$

现在,请你帮 @hprogq\texttt{@hprogq} 实现这个核心压缩算法。


输入格式

输入包含一行,为一个由大写英文字母组成的字符串 SS。 字符串长度满足 1≤∣S∣≤10001 \le |S| \le 1000。

输出格式

输出一行,表示经过“智能游程编码”规则压缩后的字符串。


输入输出样例

HHHHHHPPPRRRROOOOOOOOGGGGGGGQQQQQ
6H3P4R8O7G5Q
AAAABBBCCDEEEEEEEEEEE
4A3BCCD11E

软件学院 2025 级编程竞赛实验班结业选拔考试

未参加
状态
已完成
规则
XCPC
题目
13
开始于
2025-12-28 18:00
结束时间
2025-12-28 20:00
持续时间
2 小时
主持人
参赛人数
69