Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <algorithm>
- #include <set>
- #include <cstdlib>
- #include <queue>
- #include <sstream>
- #include <map>
- #include <iomanip>
- #include <math.h>
- #include <numeric>
- #include <stdexcept>
- #include <unordered_set>
- using namespace std;
- //#pragma GCC optimize("O3")
- //#pragma GCC optimize("Ofast")
- //#pragma GCC optimize("unroll-loops")
- //#pragma GCC optimize("Ofast", "O3", "unroll-loops")
- //#pragma GCC optimize("sse,sse2,sse3,sse4")
- typedef long long ll;
- typedef unsigned long long ull;
- #define pb push_back
- #define mp make_pair
- #define all(x) x.begin(), x.end()
- #define rall(x) x.rbegin(), x.rend()
- signed main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int q;
- cin >> q;
- while (q--) {
- string s;
- int n, k;
- map<char, int> m;
- cin >> n >> k >> s;
- for (auto ch : s) m[ch]++;
- string res;
- while (!m.empty()) {
- char ch = m.begin()->first;
- int p = m.begin()->second;
- if (p >= k) {
- res += ch;
- if (p == k) m.erase(ch);
- else m.begin()->second -= k;
- continue;
- }
- else if (m.size() == 1) {
- if (ch != res.back()) {
- sort(all(s));
- res = string(s.begin() + k - 1, s.end());
- break;
- }
- else {
- res += ch;
- break;
- }
- }
- else if (res.size() == 0) {
- int count = 0;
- vector<char> chs;
- while (count < k && !m.empty()) {
- chs.push_back(m.begin()->first);
- m.begin()->second--;
- if (m.begin()->second == 0) m.erase(m.begin());
- ++count;
- }
- sort(all(chs));
- res += chs.back();
- break;
- }
- else {
- while (!m.empty()) {
- res.push_back(m.begin()->first);
- m.begin()->second--;
- if (m.begin()->second == 0) m.erase(m.begin());
- }
- break;
- }
- }
- cout << res << "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment