Problem p03355 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>

using namespace std;

using ll = long long int;

#define REP(i, N) for (int i = 0; i < (N); ++i)
#define scanInt(x)                                                             \
  int x;                                                                       \
  scanf("%d", &(x));                                                           \
  getchar();
#define scanLLInt(x)                                                           \
  ll x;                                                                        \
  scanf("%lld", &(x));                                                         \
  getchar();
#define scanVecInt(A, N)                                                       \
  vector<int> A(N);                                                            \
  REP(i, N) {                                                                  \
    scanf("%d", &(A[i]));                                                      \
    getchar();                                                                 \
  }
#define scanVecLLInt(A, N)                                                     \
  vector<ll> A(N);                                                             \
  REP(i, N) {                                                                  \
    scanf("%lld", &(A[i]));                                                    \
    getchar();                                                                 \
  }

int main() {
  string S;
  cin >> S;
  scanInt(K);
  map<char, vector<int>> cmap;
  REP(i, S.size()) {
    auto &c = S[i];
    cmap[c].emplace_back(i);
  }
  // priority_queue<string, vector<string>, greater<string>> q;
  set<string> q;
  REP(ns, S.size()) {
    REP(l, S.size() - ns) { q.emplace(S.substr(ns, l + 1)); }
  }
  // for (char c = cmap.begin()->first; c <= 'z'; ++c){
  //     REP(k, S.size()){
  //         for (auto& n : cmap[c]){
  //             if (n + k < S.size()){
  //                 q.emplace(S.substr(n, k + 1));
  //             }
  //         }
  //         if (K <= q.size()) break;
  //     }
  //     if (K <= q.size()) break;
  // }
  // for (auto& s : q){
  //     cout << s << endl;
  // }
  auto it = q.begin();
  REP(i, K - 1)++ it;
  cout << *it << endl;
  // if (K == 1){
  //     cout << cmap.begin()->first << endl;
  //     return 0;
  // }
  // for (auto& p : cmap){
  //     cout << p.first << ": ";
  //     for (auto& n : p.second){
  //         cout << n << " ";
  //     }
  //     cout << endl;
  // }
}


Fixed submission:
#include <bits/stdc++.h>

using namespace std;

using ll = long long int;

#define REP(i, N) for (int i = 0; i < (N); ++i)
#define scanInt(x)                                                             \
  int x;                                                                       \
  scanf("%d", &(x));                                                           \
  getchar();
#define scanLLInt(x)                                                           \
  ll x;                                                                        \
  scanf("%lld", &(x));                                                         \
  getchar();
#define scanVecInt(A, N)                                                       \
  vector<int> A(N);                                                            \
  REP(i, N) {                                                                  \
    scanf("%d", &(A[i]));                                                      \
    getchar();                                                                 \
  }
#define scanVecLLInt(A, N)                                                     \
  vector<ll> A(N);                                                             \
  REP(i, N) {                                                                  \
    scanf("%lld", &(A[i]));                                                    \
    getchar();                                                                 \
  }

int main() {
  string S;
  cin >> S;
  scanInt(K);
  map<char, vector<int>> cmap;
  REP(i, S.size()) {
    auto &c = S[i];
    cmap[c].emplace_back(i);
  }
  // priority_queue<string, vector<string>, greater<string>> q;
  set<string> q;
  REP(ns, S.size()) {
    REP(l, min(static_cast<int>(S.size() - ns), K)) {
      q.emplace(S.substr(ns, l + 1));
    }
  }
  // for (char c = cmap.begin()->first; c <= 'z'; ++c){
  //     REP(k, S.size()){
  //         for (auto& n : cmap[c]){
  //             if (n + k < S.size()){
  //                 q.emplace(S.substr(n, k + 1));
  //             }
  //         }
  //         if (K <= q.size()) break;
  //     }
  //     if (K <= q.size()) break;
  // }
  // for (auto& s : q){
  //     cout << s << endl;
  // }
  auto it = q.begin();
  REP(i, K - 1)++ it;
  cout << *it << endl;
  // if (K == 1){
  //     cout << cmap.begin()->first << endl;
  //     return 0;
  // }
  // for (auto& p : cmap){
  //     cout << p.first << ": ";
  //     for (auto& n : p.second){
  //         cout << n << " ";
  //     }
  //     cout << endl;
  // }
}