SP8625 NY10C - Just The Simple Fax
题目描述
传真机利用行程长度编码(RLE)进行数据压缩。RLE 是一种简单的数据压缩方法,用于将数据中连续重复的值存储为一个数据值和出现次数,而不是保存原始序列。这种方式对拥有大量重复数据的文件特别有效,例如简单的图形、图标、文本和线条画等。然而,对于很少有重复数据的文件(如照片),这种编码反而可能增加文件大小。
在这个问题中,你需要编写一个程序,使用基础的 RLE 算法对数据块进行编码。一个行程被编码为两个字节的序列。第一个字节表示计数,第二个字节表示重复的值。计数使用一个 8 位编码,其中最高位为 1,剩下的 7 位代表“计数减去3”。这样可以让每个两字节的序列最多表示 130 的计数(也就是说,最小行程计数是 3)。如果数据不属于一个行程,它们将原样编码,并在前面加上一个字节,表示非行程字节数减去1,范围从 0 到 127,代表 1 到 128 个字节(这种情况下最高位始终为 0)。
如果一个行程超过130个字节,则必须用多个序列编码,第一个序列总是130字节的行程。所有3个字节或以上的行程都必须使用行程编码。如果非行程数据超过128字节,也需要用多个非行程序列。例如,262字节的行程会被编码为两个130字节的行程,后面是一个2字节的非行程。
输入格式
输入的第一行是整数 $P$($1 \le P \le 1000$),表示接下来的数据集数量。每个数据集包含多行信息。第一行有两个十进制整数值:问题编号和一个空格,后面是字节数 $B$($1 \le B \le 5000$),表示要编码的数据数量。其余行包含待编码的数据。每行包含 80 个十六进制数字(最后一行可能少于 80 个)。每两个十六进制数字代表一个字节。可用的十六进制数字为:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F。
输出格式
对于每个数据集,输出包括多行。第一行有一个十进制整数,表示数据集编号,后面是一个空格,再是一个整数,表示总的编码字节数。接下来的行包含编码后的数据,每行80个十六进制数字(最后一行可能少于80个)。
**本翻译由 AI 自动生成**