CF1348C Phoenix and Distribution
思路:
首先对字符串从小到大进行排序,然后对其分情况进行讨论、
首先,我们讲前k个字符依次放入a[1]-a[k]中肯定是最优的第一步。
那么如果最小的字符个数小于k的话答案就为s[k]了,因为此时我们要让字典序最大的最小,一个字符肯定是最优解。
如果不小于的话那就需要进行下一步
其次我们需要判断后面的字符,后面的字符如果都相等,那么我们就把他们全部均分输出即可,若不相等则答案为最小的字符加上后面所有的字符。
#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define pi 3.1415926535
#define me(a,b,c) memset(a,b,sizeof c)
#define eps 0.00000001
//#define x first
//#define y second
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
typedef pair<int, int> pii;
const int N = 1e6+10;
ll a[N];
ll b[N];
char s[N];
map<ll, int>mp;
int main()
{
int t;
cin >> t;
while (t--)
{
mp.clear();
int n, k;
cin >> n >> k;
cin >> s + 1;
sort(s+1,s+1+n);
if (s[1] != s[k]) {
cout << s[k] << endl;
continue;
}
else {
cout << s[1];
}
if (s[k+1] == s[n]) {
for (int i = 0; i < (n - 1) / k; i++)
cout << s[n];
}
else {
for (int i = k + 1; i <= n; i++)
cout << s[i];
}
cout << endl;
}
}
// _ooOoo_
// o8888888o
// 88" . "88
// (| -_- |)
// O\ = /O
// ____/`---'\____
// .' \| |// `.
// / \||| : |||// \
// / _||||| -:- |||||- \
// | | \\ - /// | |
// | \_| ''\---/'' | |
// \ .-\__ `-` ___/-. /
// ___`. .' /--.--\ `. . __
// ."" '< `.___\_<|>_/___.' >'"".
// | | : `- \`.;`\ _ /`;.`/ - ` : | |
// \ \ `-. \_ __\ /__ _/ .-` / /
// ======`-.____`-.___\_____/___.-`____.-'======
// `=---='
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// Buddha blesses the code with no bugs