あなたは、文字列を与えられています S からなります nは 小文字のラテン文字。polycarpは正確に除去したいです k個の 文字(k≤n)文字列から 秒。polycarpは、次のアルゴリズムを使用して のk 回:
- 少なくとも1つの文字がある場合は、「」、左端の発生を削除し、アルゴリズムを停止し、そうでない場合は次の項目に移動します。
- 少なくとも1つの文字「がある場合b」は、左端の発生を削除し、アルゴリズムを停止し、そうでない場合は次の項目に移動します。
- ...
- 文字「の左端の発生取り除くZ」を、アルゴリズムを停止します。
このアルゴリズムは、文字列から単一の文字を削除します。polycarpは、まさにこのアルゴリズムを実行します kの ように正確に取り外し、回 k個の 文字。
polycarpは、結果の文字列を見つけます。
入力
入力の最初の行は、2つの整数を含む N 及び K(1 ≤ k個の≤ N ≤ 4 ⋅ 10 5) -文字列の長さとのpolycarpが削除された文字の数。
2行目は文字列が含まれています S からなる n個 の小文字のラテン文字。
出力
から取得される文字列を印刷 S のpolycarpが正確に除去した後、 k個の上記のアルゴリズムを使用して文字 k 倍。
結果の文字列が空の場合は、何も印刷しません。何か、空行(改行)を印刷しないように許可されています。
例
入力1
15 3 cccaabababaccbc
出力1
cccbbabaccbc
入力2
15 9 cccaabababaccbc
出力2
CCCCCC
入力3
1 1 で
出力3
アイデア:
バケットの数保存された文字とのアナロジーバケットソート
コード:
1の#include <stdio.hの> 2の#include < ストリング・H> 3の#include <iostreamの> 4の#include < ストリング > 5の#include <math.h>の 6の#include <アルゴリズム> 7の#include <ベクトル> 8#含む<スタック> 9の#include <キュー> 10の#include < 設定 > 11の#include <地図> 12の#include <math.h>の 13 のconst int型 INF = 0x3f3f3f3f 。 14 typedefの長い 長いLL。 CONST INT MOD = 1E9 + 7 ; 16 CONST INT MAXN = 4。 * 1E5 + 10 ; 17 使用して 名前空間STD; 18である 。19 チャー[MAXN] STR; 20である INT CNT [ 27 ]; // 元の文字の数 21は、 INT NUM [ 27 ] ; // 文字処理の数 22は、 23である INT (メイン) 24 { 25 INT N-、K; 26は、 scanfの(" %のD%D "、およびN-、&K)。 27 GETCHAR()。 28 のためには、(int型 i = 0 ; iがn <; iは++ ) 29 { 30 のscanf(" %のC "、&STR [I])。 31 CNT [STR [I] - ' ' + 1 ] ++ ; 32 NUM [STR [I] - ' ' + 1 ] ++ ; 33 } 34 STR [N] = 0 ; 35 のために(int型 I = 1 ; I <= 26 ; I)が++ // ''とk番目のプロセスが開始 36 { 37 [ ながら(NUM [I] && K) 38は 、{ 39 - NUM [I] ; 40 K-- ; 41れる } 42である } 43はである ため(int型 Iを= 0 ; STR [I]; I ++の) 44である { 45 IF - (CNT [STR [I] ' ' + 。1 [STR [I] - ]> NUM ' ' + 1 ])// 文字の位置について説明します削除46 { 47 CNT [STR [I] - ' ' + 1 ] - ; 48 続行; 49 } 50 他// これがない場合の文字の位置が削除され、文字の出力51で のprintf(" %のC " 、STR [I] ); 52である } 53は、リターン0 ; 54です }