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 翻译