CF2225F String Cutting
题目描述
给定一个只包含小写拉丁字母的字符串 $s$。你需要将其切分成 $k$ 个及以上的部分,使得每个部分至少包含 $l$ 个字母。
切分后,将所有部分按字典序排序。你的任务是切分字符串,使排序后的第 $k$ 个字符串在字典序上尽可能大。
例如,如果 $s = $ "abracadabra",$l = 2$,$k = 5$,可以切成以下五部分:
- "ab"
- "rac"
- "ad"
- "ab"
- "ra"
排序后为:
- "ab"
- "ab"
- "ad"
- "ra"
- "rac"
"rac" 为第五个字符串,可以证明这是所有切分方式中字典序最大的第 $k$ 个部分。
输入格式
每组测试数据包含多组测试用例。第一行为测试用例个数 $t$($1 \le t \le 10^4$)。每组测试用例包含两行:
第一行为三个整数 $n$、$l$、$k$($1 \le n, l, k \le 10^{6}$)。
第二行为一个长度为 $n$、只含小写拉丁字母的字符串 $s$。
输入的附加约束条件:
- 所有测试用例中 $n$ 的总和不超过 $10^{6}$。
输出格式
对于每组测试用例,输出以下之一:
- 如果存在合法切分方式,第一行输出 YES,第二行输出字典序最大的第 $k$ 个部分。
- 如果不存在合法切分方式,只输出一行 NO。
注意:需使用大写字母输出 YES 和 NO。
说明/提示
由 ChatGPT 5 翻译