SP8626 NY10D - Show Me The Fax

题目描述

传真机常用一种基于行程长度编码(RLE)的压缩方法。RLE 是一种非常简单的压缩技术,它将连续出现的相同数据值用一个数据值和出现次数来表示,而不是直接存储原始数据段。这种方法特别适用于包含大量重复数据的文件,如简单图形图像、图标、文字和线条画等。然而,对于没有太多重复模式的文件,比如照片,这种压缩无法降低文件大小,甚至可能导致文件增大。 在本题中,你需要编写一个程序,使用简单的 RLE 算法来解码一个数据块。一个连续数据段用两个字节来编码。第一个字节表示重复次数,第二个字节表示需要重复的值。重复次数使用 8 位来表示,其中最高位固定为 1,其余 7 位表示(次数减去 3)。这意味着每个 2 字节序列的最大重复次数为 130,最小为 3。对于不属于重复段的字节,直接按原样存储,前面加上一个字节,表示该段中字节数减 1,范围为 0 到 127(即字节数范围为 1 到 128),这样的字节最高位为 0。

输入格式

输入的第一行包含一个整数 $P$($1 \le P \le 1000$),表示数据集的数量。每个数据集由多行构成。第一行包含两个十进制整数:问题编号和待解码的字节数 $B$($1 \le B \le 5000$)。后续行包含待解码的数据。每行数据包含 80 个十六进制数字(最后一行可能少于 80 个),每 2 个十六进制数字表示一个字节。十六进制数字范围为:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F。

输出格式

对每个数据集,输出多行数据。首行包括数据集编号以及解码后的字节总数,分别用空格分隔。之后的行输出解码后的数据,每行最多 80 个十六进制数字,最后一行可能会少于 80 个。 **本翻译由 AI 自动生成**