编程题
### 问题描述 大衣有一个长度为 $N$ 的字符串 $S$ 和一个整数 $K$。 让 $C$ 表示字符串 $S$ 中所有字符的集合,如果对于字符串 $S​$ 的每个后缀子串都满足: - 集合 $C$ 中任意两个字符在后缀子串中出现次数之差不超过 $K$,或者集合 $C$ 中只包含一个字符。 则称该字符串是平衡的。 大衣想将字符串 $S$ 重新排列,得到一个平衡且字典序最小的字符串 $S'$,如果存在满足条件的字符串 $S'$ 输出该字符串,否则输出 $-1$。 ### 输入格式 第一行输入一个正整数 $T​$ 表示测试数据的组数。 接下来 $T$ 组测试数据每组输入两行: - 第一行输入两个正整数 $N,K$ 分别表示字符串的长度和集合 $C​$ 中任意两个字符在后缀子串中出现次数之差的最大值。 - 第二行输入一个长度为 $N$ 的字符串 $S$。 ### 输出格式 对于每组测试数据,如果存在满足条件的字符串 $S'$ 输出该字符串,否则输出 $-1$,并换行。 ### 样例输入 ```text 3 3 1 aaa 4 2 baba 4 1 babb ``` ### 样例输出 ```text aaa aabb -1 ``` ### 说明 样例 $1$:因为 $C=$ { $a$ },字符串 $S$ 无论怎么排列都是是平衡的,且字典序已经最小。 样例 $2$:集合 $C=$ { $a,b$ },考虑重新排列后的字符串 $S'=aabb$,令 $f_a,f_b$ 分别表示字符 $a,b$ 的出现次数: - 对于后缀子串 $b$,有 $f_b=1,f_a=0$,因此 $|f_b-f_a|=1\le K$。 - 对于后缀子串 $bb$,有 $f_b=2,f_a=0$,因此 $|f_b-f_a|=2\le K$。 - 对于后缀子串 $abb$,有 $f_b=2,f_a=1$,因此 $|f_b-f_a|=1\le K$。 - 对于后缀子串 $aabb$,有 $f_b=2,f_a=2$,因此 $|f_b-f_a|=0\le K$。 因此,字符串 $S'=aabb​$ 是平衡的,可以证明这是满足条件的字符串中字典序最小的。 样例 $3​$:可以证明不存在满足条件的字符串 $S'​$。 ### 评测数据规模 对于所有的评测数据,$1\le T\le 20$,$1\le N\le 10^4$,$1\le K\le N$,字符串 $S​$ 仅包含小写字母。
查看答案
赣ICP备20007335号-2