#P16677. [Ctu2018]Locker Room
[Ctu2018]Locker Room
题目描述
Binary Casino 中有一些奇怪的房间,其中之一就是更衣室。
你每天至少需要进入更衣室两次,分别是在上班前和下班后。进入更衣室不需要钥匙或密码,因为门上安装了一套全新的安全锁系统。
每次你想进入更衣室时,锁都会生成一道谜题。潜在的入侵者往往需要很长时间才能解开它,而在赌场工作了一段时间的员工通常能够熟练解决。
这是你在赌场工作的第二周。由于没能及时解开谜题,你已经迟到了三次。于是,你决定编写一个程序来自动解决它。
谜题规则如下。
给定一个由 个小写英文字母组成的环形字符串。需要选择若干个长度恰好为 的连续子串,并标记这些子串中的字符,直到环形字符串中的每一个字符都至少被标记一次。
因为字符串是环形的,所以子串可以越过字符串末尾,并从字符串开头继续。
标记一个子串不会改变原字符串,同一个字符也可以被标记多次。
对于某一种选择方案,考察所有被选择子串中字典序最大的子串。锁要求输出这个子串。
你可以自由决定选择哪些子串。目标是使上述“所选子串中字典序最大的子串”在所有合法选择方案中尽可能小。
换句话说:
- 先选择若干个长度为 的环形子串,使它们覆盖全部 个字符;
- 设这些子串中字典序最大的一个为 ;
- 在所有合法覆盖方案中,使 的字典序最小;
- 输出这个最小可能的 。
例如,给定环形字符串 acdb,其中 、。
可以选择子串 acd 和 bac:
acd覆盖原字符串中的前三个字符;bac越过字符串末尾,覆盖最后一个字符以及开头两个字符;- 所有字符均被覆盖;
- 两个子串中字典序较大的是
bac。
这个谜题的答案为 bac。
输入格式
第一行包含两个整数 :
分别表示环形字符串长度和每个被标记子串的长度。
第二行包含一个长度为 、仅由小写英文字母组成的字符串,表示给定环形字符串。
输出格式
输出一个长度为 的字符串,表示所有合法覆盖方案中,能够得到的字典序最小的“最大被选子串”。
样例 1
输入
4 3
acdb
输出
bac
样例 2
输入
6 2
aababa
输出
ab
样例 3
输入
10 4
abaaabaaba
输出
aaba