Alphabetic Removals
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

You are given a string k times:

  • if there is at least one letter 'a', remove the leftmost occurrence and stop the algorithm, otherwise go to next item;
  • if there is at least one letter 'b', remove the leftmost occurrence and stop the algorithm, otherwise go to next item;
  • ...
  • remove the leftmost occurrence of the letter 'z' and stop the algorithm.

This algorithm removes a single letter from the string. Polycarp performs this algorithm exactly kcharacters.

Help Polycarp find the resulting string.

Input

The first line of input contains two integers 1≤k≤n≤4⋅105) — the length of the string and the number of letters Polycarp will remove.

The second line contains the string n lowercase Latin letters.

Output

Print the string that will be obtained from k times.

If the resulting string is empty, print nothing. It is allowed to print nothing or an empty line (line break).

Examples
input
Copy
15 3
cccaabababaccbc
output
Copy
cccbbabaccbc
input
Copy
15 9
cccaabababaccbc
output
Copy
cccccc
input
Copy
1 1
u
output
Copy

 

这三天写CF终于一遍过了一道题

题意: 给你n个字符,让你删除k个字符,从a开始删,从左到右,删完k个为止,全部删完输出“nothing”或者不输出

vis数组记录每个字符的个数,然后计算下删k个字符删到那个字符为止,记录下剩余这个字符的数量,将这个字符前面的字符的记录值归0

然后从后往前遍历,遇到vis数组还有值得就加入保存结果得字符串t

最后反着输出字符串t(因为你开始时从后往前遍历的,得到的是倒的字符串)

#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#define debug(a) cout << #a << " " << a << endl
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
typedef long long ll;
int main(){
    std::ios::sync_with_stdio(false);
    ll n, k;
    while( cin >> n >> k ) {
        string s;
        cin >> s;
        ll vis[50] = {0}, num = 0;
        for( ll i = 0; i < s.length(); i ++ ) {
            vis[s[i]-'a'] ++;
        }
        for( ll i = 0; i <= 25; i ++ ) {
            num += vis[i];
            if( num > k ) {
                vis[i] = vis[i] - ( k - ( num - vis[i] ) );
                break;
            } else {
                vis[i] = 0;
            }
        }
        string t = "";
        for( ll i = s.length()-1; i >= 0; i -- ) {
            if( vis[s[i]-'a'] ) {
                t += s[i];
                vis[s[i]-'a'] --;
            }
        }
        if( t.length() == 0 ) {
            cout << endl;
            continue;
        }
        for( ll i = t.length()-1; i >= 0; i -- ) {
            cout << t[i];
        }
        cout << endl;
    }
    return 0;
}

 

相关文章:

  • 2021-10-16
  • 2022-03-08
  • 2021-08-13
  • 2022-12-23
  • 2021-10-23
  • 2021-11-20
  • 2022-12-23
  • 2021-06-18
猜你喜欢
  • 2022-02-11
  • 2021-07-29
  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
  • 2021-12-13
相关资源
相似解决方案