小 A 拥有一个仅由小写字母组成的字符串 S。
可以将其中的字母染色为 k 种颜色。并不是每个字母都需要进行染色,但是要求对于每种颜色,必须至少有一个字母由该颜色染色。
然后可以交换相同颜色的字母任意次。
操作结束后意味着小 A 将拥有 k 种颜色的子串,第 i 个子串包含了所有染色为第 i 种颜色的字母。
小 A 的任务是对这个字符串 S 进行染色,但是要保证这 k 个子串可以成为回文子串,并且其中最短的子串长度尽可能长。
如果字符串从左到右和从右到左的读取结果相同那么它就是回文的。比如字符串a,aba,aaaa是回文的,但是abab,aaabaa不是回文的。
第一行读入一个整数 t,表示有 t 组测试数据。
接下来会读入 t 组测试数据:
每组测试数据的第一行为两个整数 n 和 k,分别表示字符串 S 的长度 和 可以染色的颜色种类 。
第二行为一个仅包含小写字母的字符串 S。
输出 t 个整数,每行一个,表示对于每组数据的字符串 S 染色后所能形成的 k 个子串中最短的回文串最长的长度。
1 8 2 bxyaxzay
3
2 6 3 aaaaaa 6 1 abcdef
2 1
7 6 6 abcdef 3 2 dxd 11 2 abcabcabcac 6 6 sipkic 7 2 eatoohd 3 1 llw 6 2 bfvfbv
1 1 5 1 1 3 3
可以把长度为 8 的字符串 bxyaxzay 染色为两种颜色。
染色后可以变为:\red{b}\blue{xy}\red{a}\blue{xz}\red{a}\blue{y} 。
我们可以得到两个颜色的子串分别为:\red{baa},\blue{xyxzy} 。
这两个子串都已通过交换位置变为回文子串:\red{aba}, \blue{xyzyx} 。
最短长度为 3,且无法再找到让其变得更大的方案。
见选手目录下的 color/color4.in 与 color/color4.ans。
| 测试点编号 | t | k | n | 特殊性质 |
|---|---|---|---|---|
| 测试点 1 \sim 2 | \le 3 | \le 10 | \le 10 | A |
| 测试点 3 \sim 5 | \le 3 | \le 10 | \le 12 | B |
| 测试点 6 | \le 3 | \le 10 | \le 15 | C |
| 测试点 7 \sim 8 | \le 10 | \le 10 | \le 10 | 无 |
| 测试点 9 \sim 13 | \le 30 | \le 30 | \le 100 | 无 |
| 测试点 14 \sim 25 | \le 10000 | \le 2 \times 10^5 | \le 2 \times 10^5 | 无 |
特殊性质 A:字符串中恰好只有 1 种字母,如 S 为 aaaaa。
特殊性质 B:字符串中恰好只有 2 种字母,如 S 为 abababa。
特殊性质 C:每种字符出现的次数恰好是 k 的倍数,如 S 为 bbbcccddd,k=3。
数据保证每组测试用例中 k \leq n 且 n 的和不会超过 2 \times 10^5 。
color.zip (654.62 KB)
| 时间限制 | 1 秒 |
| 内存限制 | 512 MB |
| 提交次数 | 313 |
| 通过人数 | 117 |
| 金币数量 | 0 枚 |
| 难度 | 基础 |