Georgiy031

Untitled

May 1st, 2020
633
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5. #include <set>
  6. #include <cstdlib>
  7. #include <queue>
  8. #include <sstream>
  9. #include <map>
  10. #include <iomanip>
  11. #include <math.h>
  12. #include <numeric>
  13. #include <stdexcept>
  14. #include <unordered_set>
  15.  
  16. using namespace std;
  17.  
  18. //#pragma GCC optimize("O3")
  19. //#pragma GCC optimize("Ofast")
  20. //#pragma GCC optimize("unroll-loops")
  21. //#pragma GCC optimize("Ofast", "O3", "unroll-loops")
  22. //#pragma GCC optimize("sse,sse2,sse3,sse4")
  23.  
  24.  
  25. typedef long long ll;
  26. typedef unsigned long long ull;
  27. #define pb push_back
  28. #define mp make_pair
  29. #define all(x) x.begin(), x.end()
  30. #define rall(x) x.rbegin(), x.rend()
  31.  
  32.  
  33. signed main() {
  34.  
  35.     ios_base::sync_with_stdio(false);
  36.     cin.tie(nullptr);
  37.     cout.tie(nullptr);
  38.  
  39.     int q;
  40.     cin >> q;
  41.     while (q--) {
  42.         string s;
  43.         int n, k;
  44.         map<char, int> m;
  45.         cin >> n >> k >> s;
  46.         for (auto ch : s) m[ch]++;
  47.         string res;
  48.         while (!m.empty()) {
  49.             char ch = m.begin()->first;
  50.             int p = m.begin()->second;
  51.             if (p >= k) {
  52.                 res += ch;
  53.                 if (p == k) m.erase(ch);
  54.                 else m.begin()->second -= k;
  55.                 continue;
  56.             }
  57.             else if (m.size() == 1) {
  58.                 if (ch != res.back()) {
  59.                     sort(all(s));
  60.                     res = string(s.begin() + k - 1, s.end());
  61.                     break;
  62.                 }
  63.                 else {
  64.                     res += ch;
  65.                     break;
  66.                 }
  67.             }
  68.             else if (res.size() == 0) {
  69.                 int count = 0;
  70.                 vector<char> chs;
  71.                 while (count < k && !m.empty()) {
  72.                     chs.push_back(m.begin()->first);
  73.                     m.begin()->second--;
  74.                     if (m.begin()->second == 0) m.erase(m.begin());
  75.                     ++count;
  76.                 }
  77.                 sort(all(chs));
  78.                 res += chs.back();
  79.                 break;
  80.             }
  81.             else {
  82.                 while (!m.empty()) {
  83.                     res.push_back(m.begin()->first);
  84.                     m.begin()->second--;
  85.                     if (m.begin()->second == 0) m.erase(m.begin());
  86.                 }
  87.                 break;
  88.             }
  89.         }
  90.         cout << res << "\n";
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment