zoukankan      html  css  js  c++  java
  • CoderForces999C-Alphabetic Removals

    C. 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 ss consisting of nn lowercase Latin letters. Polycarp wants to remove exactly kk characters (knk≤n) from the string ss. Polycarp uses the following algorithm kk 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 kk times, thus removing exactly kk characters.

    Help Polycarp find the resulting string.

    Input

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

    The second line contains the string ss consisting of nn lowercase Latin letters.

    Output

    Print the string that will be obtained from ss after Polycarp removes exactly kk letters using the above algorithm kk 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

    AC代码为:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=4e5+10;
    struct Node{
        int id,temp;
        char c;
    } node[maxn];
    bool cmp1(Node a,Node b)
    {
        return a.c==b.c? a.id<b.id : a.c-'a'<b.c-'a';
    }
    bool cmp2(Node a,Node b)
    {
        return a.id<b.id;
    }
    int n,k;
    char s1[maxn];
    int main()
    {
        scanf("%d%d",&n,&k);
        scanf("%s",s1);
        int len=strlen(s1);
        for(int i=0;i<len;i++)
        {
            node[i].c=s1[i];
            node[i].id=i;
            node[i].temp=0;
        }
        sort(node,node+len,cmp1);
        for(int i=0;i<k;i++) node[i].temp=1;
        sort(node,node+len,cmp2);
        for(int i=0;i<len;i++)
        {
            if(node[i].temp==1) continue;
            else printf("%c",node[i].c); 
        }
        printf(" ");
        
        return 0;
    }






  • 相关阅读:
    Java版本及历史简述
    ASCII、Unicode、UTF-8、UTF-16、GBK、GB2312、ANSI等编码方式简析
    同步(Synchronous)和异步(Asynchronous)方法的区别
    例10-12 *uva1637(概率dp)
    例10-11 uva11181
    例10-10 uva10491(简单概率)
    例10-9 uva1636简单概率问题
    全排列hash-康拓展开
    10-8 uva1262密码
    例10-6 uva1635(唯一分解定理)
  • 原文地址:https://www.cnblogs.com/csushl/p/9386537.html
Copyright © 2011-2022 走看看