传送门
思路如下:把一个字符串分成k 份,使最大的字典序最小。先把字符串sort,然后分类讨论
1.如果前k - 1个一样
1.1 如果第k 个和最后一个一样,均分剩余字符串,输出最长的
1.2 如果不一样,把后面所有的接到第一个后面输出
2.如果前k - 1个不一样,直接输出第k - 1 个
代码如下:
int T = 1; cin >> T;
while(T --){
int n, k, cat;
cin >> n >> k;
string s; cin >> s;
sort(s.begin(), s.end());
string ans = "";
ans += s[0];
if(n == k){
cout << s[k - 1] << endl;
} else {
if(s[0] == s[k - 1]){
if (s[k] == s[n - 1]) {
int num = n - k;
if (num % k == 0) {
cat = num / k;
} else {
cat = num / k + 1;
}
rep(i, 1, cat) {
ans += s[k];
}
cout << ans << endl;
} else {
rep(i, k, s.size()){
ans += s[i];
}
cout << ans << endl;
}
} else {
cout << s[k - 1] << endl;
}
}
}
return 0;