题意:
把字符串 s s s 中的字符分给 k k k 个空字符串,要求每个空字符串都有字符,同时最小化 k k k 个字符串中字典序的最大值,输出分配后字典序最大的字符。
分类讨论,如果 s s s 排序后, s 0 = s k − 1 s_0=s_{k-1} s0=sk−1 答案就是 s k − 1 s_{k-1} sk−1 , 如果相等且 [ k , n − 1 ] [k,n - 1] [k,n−1] 只有一种字符,就要把这种字符依此分给每个字符串,输出最大的. 如果相等但是 [ k , n − 1 ] [k,n - 1] [k,n−1] 多种字符,就把 k − 1 k-1 k−1 后面的所有字符加在 s 0 s_0 s0后面。
AC代码:
const int N = 2e5 + 10;
int n, k;
string s, ans;
int main()
{
int t;
sd(t);
while (t--)
{
ans.clear();
bool flag = 0;
sdd(n, k);
cin >> s;
sort(s.begin(), s.end());
rep(i, k + 1, n - 1)
{
if (s[i] != s[i - 1])
{
flag = 1;
break;
}
}
if (s[0] == s[k - 1])
{
ans += s[0];
if (flag)
{
rep(i, k, n - 1)
ans += s[i];
}
else
{
rep(i, 1, (n - 1) / k)
ans += s[k];
}
}
else
ans += s[k - 1];
cout << ans << endl;
}
return 0;
}