zoukankan      html  css  js  c++  java
  • CodeForces (字符串从字母a开始删除k个字母)

    You are given a string s consisting of n lowercase Latin letters. Polycarp wants to remove exactly k characters (k≤n) from the string s. Polycarp uses the following algorithm 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 k times, thus removing exactly k characters.

    Help Polycarp find the resulting string.

    Input

    The first line of input contains two integers n and k (1kn4105) — the length of the string and the number of letters Polycarp will remove.

    The second line contains the string s consisting of n lowercase Latin letters.

    Output

    Print the string that will be obtained from s after Polycarp removes exactly k letters using the above algorithm k times.

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

    Examples

    Input 1

    15 3
    cccaabababaccbc

    Output 1

    cccbbabaccbc

    Input 2

    15 9
    cccaabababaccbc

    Output 2

    cccccc

    Input 3

    1 1
    u

    Output 3

    思路:

    类比桶排序,用桶来存字母的个数

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <string>
     5 #include <math.h>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <stack>
     9 #include <queue>
    10 #include <set>
    11 #include <map>
    12 #include <math.h>
    13 const int INF=0x3f3f3f3f;
    14 typedef long long LL;
    15 const int mod=1e9+7;
    16 const int maxn=4*1e5+10;
    17 using namespace std;
    18 
    19 char str[maxn];
    20 int cnt[27];//原来字母的个数 
    21 int num[27];//处理后字母的个数 
    22 
    23 int main()
    24 {
    25     int n,k;
    26     scanf("%d %d",&n,&k);
    27     getchar();
    28     for(int i=0;i<n;i++)
    29     {
    30         scanf("%c",&str[i]);
    31         cnt[str[i]-'a'+1]++;
    32         num[str[i]-'a'+1]++;
    33     }
    34     str[n]=0;
    35     for(int i=1;i<=26;i++)//从'a'开始进行k次处理 
    36     {
    37         while(num[i]&&k)
    38         {
    39             num[i]--;
    40             k--;
    41         }
    42     }
    43     for(int i=0;str[i];i++)
    44     {
    45         if(cnt[str[i]-'a'+1]>num[str[i]-'a'+1])//说明该位置字母已删除 
    46         {
    47             cnt[str[i]-'a'+1]--;
    48             continue;
    49         }
    50         else //若该位置字母没被删,输出该字母 
    51             printf("%c",str[i]);
    52     }
    53     return 0;
    54 }
     
  • 相关阅读:
    线段树模板(HDU 6356 Glad You Came)
    Treap模板
    Codeforces Round #499 (Div. 2) D. Rocket题解
    Codeforces Round #499 (Div. 2) C Fly题解
    KMP与AC自动机模板
    HDU 6351 Naive Operations(线段树)
    python核心编程第六章练习6-13
    python核心编程第六章练习6-12
    [转]我为什么要学习python
    python核心编程第六章练习6-11
  • 原文地址:https://www.cnblogs.com/jiamian/p/11620309.html
Copyright © 2011-2022 走看看