题目大意:有n个字母,要把他们分成k份,每份找出其中没出现过的最小字母,然后组成一个长度为k的字符串,求字典序最大的字符串,
思路:求字典序最大的字符串,就要让没出现过的最小字母最大,那么我们就让每份都从最小的a开始网上排,每个字母只放一个,这样就能使没出现过的那个字母最大,所以我们统计每个字母的次数,每一份就从a开始逐个令字母数量-1,输出第一个遇到的数量为0的字母
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 205;
char s[N];
int cnt[30];
int main()
{
int t;
cin >> t;
while (t--)
{
int n, k;
scanf("%d%d", &n, &k);
getchar();//读入换行符
for (int i = 1; i <= 26; i++)
{
cnt[i] = 0;
}
for (int i = 1; i <= n; i++)
{
char c;
scanf("%c", &c);
cnt[c - 'a' + 1]++;//统计每个字母出现的次数
}
for (int i = 1; i <= k; i++)
{
int flag = n / k + 1;//标记哪个是最小的没出现过的字母,如果没有遇到数量为0的就是n/k+1个字母
for (int i = 1; i <= n / k; i++)
{//遍历每份中的所有字母
if (cnt[i] > 0)
cnt[i]--;//维护字母数量-1
else
{
flag = i;//第一个数量为0的字母
break;
}
}
printf("%c", 'a' + flag-1);
}
printf("\n");
}
return 0;
}