C. Phoenix and Distribution
题意
给出一个字符串(s),现在要把所有字符分到k个字符串中((a_1,a_2,a_3...a_k)),
输出(min(max(a_1,a_2...a_k)))。(a_i)不能为空
思路
首先对字符数组排个序,然后依次为(a_1,a_2,a_3...),分派字符。
如果在第一轮出现了不同的字符,即(a[1][1],a[2][1],a[3][1]...a[k][1])存在不同字符。
输出(s_k)。
如果(k==n),输出(s_k)。
如果第二轮的第一个字符小于最后一轮的最后一个字符((s[k+1]<s[n])),输出(s+k),
否则每一轮的字符肯定一样,每轮输出一个字符即可。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int inf=0x3f3f3f3f;
typedef long long ll;
char str[N];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,k;
scanf("%d%d",&n,&k);
scanf("%s",str+1);
sort(str+1,str+1+n);
if(str[1]!=str[k])
printf("%c
",str[k]);
else
{
if(k==n) printf("%c
",str[k]);
else
{
if(str[k+1]<str[n])
printf("%s
",str+k);
else
{
for(int i=1;i<=(n-1)/k+1;i++)
printf("%c",str[(i-1)*k+1]);
printf("
");
}
}
}
}
return 0;
}
/*
*/