Submission #57632650


Source Code Expand

/*                 _        ____              */
/*   AC        U  /"\  u U /"___|     AC      */
/*              \/ _ \/  \| | u               */
/*        AC    / ___ \   | |/__    AC        */
/*             /_/   \_\   \____|             */
/* AC           \\    >>  _// \\         AC   */
/*             (__)  (__)(__)(__)             */
/*         github.com/romophic/Compro         */
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define int long long
#define double long double
#define rep(i, e) for (int i = 0; i < (int)(e); i++)
#define rrep(i, b, e) for (int i = (b); i < (int)(e), i++)
#define all(var) begin(var), end(var)
using namespace std;
constexpr int INF = 1LL << 60;
constexpr array<int, 4> dx({1, 0, 0, -1}), dy({0, 1, -1, 0});
template <class T>
ostream &operator<<(ostream &_ostr, const vector<T> &_v);
template <class T>
ostream &operator<<(ostream &_ostr, const deque<T> &_v);
template <class T>
ostream &operator<<(ostream &_ostr, const list<T> &_v);
template <class T, class Y>
ostream &operator<<(ostream &_ostr, const pair<T, Y> &_v);
template <class... Ts>
ostream &operator<<(ostream &_ostr, const tuple<Ts...> &t);
template <class T, class Y>
ostream &operator<<(ostream &_ostr, const map<T, Y> &_v);
template <class T, class Y>
ostream &operator<<(ostream &_ostr, const multimap<T, Y> &_v);
template <class T, class Y>
ostream &operator<<(ostream &_ostr, const unordered_map<T, Y> &_v);
template <class T, class Y>
ostream &operator<<(ostream &_ostr, const unordered_multimap<T, Y> &_v);
template <class T>
ostream &operator<<(ostream &_ostr, const set<T> &_v);
template <class T>
ostream &operator<<(ostream &_ostr, const multiset<T> &_v);
template <class T>
ostream &operator<<(ostream &_ostr, const unordered_set<T> &_v);
template <class T>
ostream &operator<<(ostream &_ostr, const unordered_multiset<T> &_v);
template <class T>
ostream &_orange(ostream &_ostr, const T &_v) {
  _ostr << "[";
  bool tr = true;
  for (auto &&i : _v)
    _ostr << (tr ? tr = false, "" : ", ") << i;
  return _ostr << "]";
}
template <class T>
ostream &operator<<(ostream &_ostr, const vector<T> &_v) { return _orange(_ostr, _v); }
template <class T>
ostream &operator<<(ostream &_ostr, const deque<T> &_v) { return _orange(_ostr, _v); }
template <class T>
ostream &operator<<(ostream &_ostr, const list<T> &_v) { return _orange(_ostr, _v); }
template <class T, class Y>
ostream &operator<<(ostream &_ostr, const pair<T, Y> &_v) { return _ostr << "(" << _v.first << ", " << _v.second << ")"; }
template <class... Ts>
ostream &operator<<(ostream &_ostr, const tuple<Ts...> &_v) {
  bool tr = true;
  _ostr << "(";
  apply([&_ostr, &tr](auto &&...args) {
    auto print = [&](auto &&val) {
      if (!tr)
        _ostr << ", ";
      _ostr << val;
      tr = false;
    };
    (print(args), ...);
  },
        _v);
  return _ostr << ")";
}
template <class T, class Y>
ostream &operator<<(ostream &_ostr, const map<T, Y> &_v) { return _orange(_ostr, _v); }
template <class T, class Y>
ostream &operator<<(ostream &_ostr, const multimap<T, Y> &_v) { return _orange(_ostr, _v); }
template <class T, class Y>
ostream &operator<<(ostream &_ostr, const unordered_map<T, Y> &_v) { return _orange(_ostr, _v); }
template <class T>
ostream &operator<<(ostream &_ostr, const set<T> &_v) { return _orange(_ostr, _v); }
template <class T>
ostream &operator<<(ostream &_ostr, const multiset<T> &_v) { return _orange(_ostr, _v); }
template <class T>
ostream &operator<<(ostream &_ostr, const unordered_set<T> &_v) { return _orange(_ostr, _v); }
template <class T>
ostream &operator<<(ostream &_ostr, const unordered_multiset<T> &_v) { return _orange(_ostr, _v); }
template <class T>
istream &operator>>(istream &_istr, vector<T> &_v);
template <class T>
istream &operator>>(istream &_istr, deque<T> &_v);
template <class T, class Y>
istream &operator>>(istream &_istr, pair<T, Y> &_v);
template <class T>
istream &_irange(istream &_istr, T &_v) {
  for (auto &i : _v)
    _istr >> i;
  return _istr;
}
template <class T>
istream &operator>>(istream &_istr, vector<T> &_v) { return _irange(_istr, _v); }
template <class T>
istream &operator>>(istream &_istr, deque<T> &_v) { return _irange(_istr, _v); }
template <class T, class Y>
istream &operator>>(istream &_istr, pair<T, Y> &_v) { return _istr >> _v.first >> _v.second; }
template <class T>
bool chmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }
template <class T>
bool chmin(T &a, const T &b) { return a > b ? a = b, 1 : 0; }
struct init {
  init() {
    cin.tie(0)->sync_with_stdio(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(16);
  }
} init;
signed main() {
  int n, k;
  cin >> n >> k;
  string s;
  cin >> s;

  vector mem(n+1, vector<int>(26, -1)); // [i][j]: ithより右にある文字jのindex
  rep(i,26)
    mem[n][i] = n;
  
  for(int i=n-1;i>=0;i--){
    for(int j=0;j<26;j++){
      if(s[i]-'a' == j){
        mem[i][j] = i;
      }else{
        mem[i][j] = mem[i+1][j];
      }
    }
  }

  string ans;
  int pos = 0;

  for(int i=0;i<k;i++){
    for(int j=0;j<26;j++){
      int nexp = mem[pos][j];
      int maxl = n-nexp+i;
      if(maxl >= k){
        ans += ('a' + j);
        pos = nexp+1;
        break;
      }
    }
  }

  cout<<ans<<endl;
}

Submission Info

Submission Time
Task 006 - Smallest Subsequence(★5)
User romophic
Language C++ 23 (gcc 12.2)
Score 5
Code Size 5422 Byte
Status AC
Exec Time 17 ms
Memory 27784 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 5 / 5
Status
AC × 2
AC × 29
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 10_random_small_00.txt, 10_random_small_01.txt, 11_random_medium_00.txt, 11_random_medium_01.txt, 12_random_large_00.txt, 12_random_large_01.txt, 13_random_max_00.txt, 13_random_max_01.txt, 13_random_max_02.txt, 20_unique_small_00.txt, 20_unique_small_01.txt, 21_unique_medium_00.txt, 21_unique_medium_01.txt, 22_unique_large_00.txt, 22_unique_large_01.txt, 23_unique_max_00.txt, 23_unique_max_01.txt, 23_unique_max_02.txt, 30_equal_small_00.txt, 30_equal_small_01.txt, 31_equal_medium_00.txt, 31_equal_medium_01.txt, 32_equal_large_00.txt, 32_equal_large_01.txt, 33_equal_max_00.txt, 33_equal_max_01.txt, 33_equal_max_02.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3408 KiB
00_sample_01.txt AC 1 ms 3508 KiB
10_random_small_00.txt AC 1 ms 3424 KiB
10_random_small_01.txt AC 1 ms 3652 KiB
11_random_medium_00.txt AC 3 ms 7060 KiB
11_random_medium_01.txt AC 3 ms 7120 KiB
12_random_large_00.txt AC 14 ms 22696 KiB
12_random_large_01.txt AC 12 ms 22096 KiB
13_random_max_00.txt AC 17 ms 27708 KiB
13_random_max_01.txt AC 16 ms 27660 KiB
13_random_max_02.txt AC 16 ms 27336 KiB
20_unique_small_00.txt AC 1 ms 3568 KiB
20_unique_small_01.txt AC 1 ms 3512 KiB
21_unique_medium_00.txt AC 6 ms 11272 KiB
21_unique_medium_01.txt AC 3 ms 6272 KiB
22_unique_large_00.txt AC 11 ms 17924 KiB
22_unique_large_01.txt AC 15 ms 25560 KiB
23_unique_max_00.txt AC 17 ms 27784 KiB
23_unique_max_01.txt AC 17 ms 27668 KiB
23_unique_max_02.txt AC 16 ms 27664 KiB
30_equal_small_00.txt AC 1 ms 3432 KiB
30_equal_small_01.txt AC 1 ms 3692 KiB
31_equal_medium_00.txt AC 8 ms 13684 KiB
31_equal_medium_01.txt AC 3 ms 6800 KiB
32_equal_large_00.txt AC 14 ms 21868 KiB
32_equal_large_01.txt AC 15 ms 25848 KiB
33_equal_max_00.txt AC 16 ms 27628 KiB
33_equal_max_01.txt AC 16 ms 27708 KiB
33_equal_max_02.txt AC 17 ms 27728 KiB