#P13469. [GCJ 2008 #2] PermRLE
[GCJ 2008 #2] PermRLE
Description
你发明了一种对游程编码(RLE)压缩算法的轻微修改,称为 PermRLE。
为了压缩一个字符串,该算法选择 到 之间整数的某个排列,将该排列应用到给定字符串的前 个字母,然后应用到接下来的 个字母的块,依此类推。字符串的长度必须能被 整除。在对所有块进行排列后,新的字符串将使用 RLE 进行压缩,RLE 的描述见下文。
将给定的排列 应用于一个 个字母的块,意味着将这些字母中的第 个放在第一个位置,第 个放在第二个位置,依此类推。例如,将排列 应用于块 "abcd",得到 "cadb"。将其应用于更长的字符串 "abcdefghij" 的各个块,得到 "cadbgehfik"。
排列后的字符串随后使用游程编码进行压缩。为简化起见,我们将字符串的压缩大小定义为连续相同字母分组的数量。例如,"aabcaaaa" 的压缩大小为 ;四个分组分别是两个字母 "a" 的一组,然后 "b" 和 "c" 各自为一组,最后是一组较长的 "a"。
显然,压缩大小可能取决于所选择的排列。由于压缩算法的目标是最小化压缩文本的大小,你的任务是选择能得到最小压缩大小的排列,并输出该最小值。
Input Format
第一行输入一个整数 ,表示测试用例的数量。接下来有 组测试用例。
每组测试用例的第一行包含一个整数 。第二行包含要压缩的字符串 。
Output Format
对于每个测试用例,输出一行,格式为 "Case #X: Y",其中 是测试用例编号, 是 的最小压缩大小。
2
4
abcabcabcabc
3
abcabcabcabc
Case #1: 7
Case #2: 12
Hint
限制条件
- 只包含小写字母 'a' 到 'z'
- 的长度能被 整除
小数据范围(5 分,测试集 1 - 可见)
- 的长度
大数据范围(30 分,测试集 2 - 隐藏)
- 的长度
由 ChatGPT 4.1 翻译
京公网安备 11011102002149号