C - Alphabetic Removals
题目链接:
You are given a string ss consisting of nn lowercase Latin letters. Polycarp wants to remove exactly kk characters (k≤nk≤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 kkcharacters.
Help Polycarp find the resulting string.
Input
The first line of input contains two integers nn and kk (1≤k≤n≤4⋅1051≤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
15 3
cccaabababaccbc
Output
cccbbabaccbc
Input
15 9
cccaabababaccbc
Output
cccccc
Input
1 1
u
Output
题目大意:就是给你一个字符串,要求你去掉k个字符,去掉的规则就是从a开始,如果有a,从a开始去,如果a没有了就从b开始,一次次的递推。
思路:一开始,我是打算一个一个的去,然后一直循环到0结束。然后忘记了看时间复杂度,如果按照我那个计算的话,时间复杂度是8*10 的十次方,这玩意。。。。肯定超时啊,我还搁那傻了吧唧的一个劲的优化,然后就是4发tle。
比完赛后,问别人有咩有比较好的算法,可以这样来做。直接按26个英文按时逐个递减,剪完a再减b,依次往下进行,这样的话时间复杂度就大大的降低了。
代码如下:
#include<iostream>#include<string>#include<cstring>#include<map>#include<cmath>using namespace std;map<char,int >wakaka;bool Exit[400005];int main(){ int n,t; cin>>n>>t; string s; cin>>s; memset(Exit,false,sizeof(Exit)); for(int i=0; i<n; i++) { wakaka[s[i]]++; } int temp=-1; while(t) { temp++; char str=char(temp+97); if(wakaka[str]==0)continue; for(int i=0; i<s.length(); i++) { if(t==0)break; if(s[i]==str&&Exit[i]==false) { Exit[i]=true; t--; } } } for(int i=0; i<s.length(); i++) { if(Exit[i]==false)cout<<s[i]; } cout<<endl; return 0;}
C - Alphabetic Removals的更多相关文章
- code forces 999C Alphabetic Removals
C. Alphabetic Removals time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- CF999C Alphabetic Removals 思维 第六道 水题
Alphabetic Removals time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- CodeForces - 999C Alphabetic Removals
C - Alphabetic Removals ≤k≤n≤4⋅105) - the length of the string and the number of letters Polycarp wi ...
- Alphabetic Removals(模拟水题)
You are given a string ss consisting of nn lowercase Latin letters. Polycarp wants to remove exactly ...
- CF999C Alphabetic Removals 题解
Content 给定一个长度为 \(n\) 的仅含小写字母的字符串,执行 \(k\) 次如下操作: 如果字符串中有 a 这个字母,删除从左往右第一个 a,并结束操作,否则继续操作: 如果字符串中有 b ...
- CoderForces999C-Alphabetic Removals
C. Alphabetic Removals time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Codeforces Round #490 (Div. 3)
感觉现在\(div3\)的题目也不错啊? 或许是我变辣鸡了吧....... 代码戳这里 A. Mishka and Contes 从两边去掉所有\(≤k\)的数,统计剩余个数即可 B. Reversi ...
- [Codeforces]Codeforces Round #490 (Div. 3)
Mishka and Contest #pragma comment(linker, "/STACK:102400000,102400000") #ifndef ONLINE_JU ...
- [codeforces] 暑期训练之打卡题(三)
每个标题都做了题目原网址的超链接 Day21<Alphabetic Removals> 题意: 给定一个字符串,要求按照字典序按照出现的前后顺序删除 k 个字母 题解: 记录字符串中各个字 ...
随机推荐
- Day16--Python--初识面向对象
今日主要内容一. 面向对象思想 1. 面向过程. 重点在'过程'. 按照事物迭代发展流程. 优点: 简单,流水线式的操作 缺点: 可扩展性差.可维护性差. 2. 面向对象. 对象是属性和动作的集合体. ...
- QSS网址
http://blog.csdn.net/liang19890820/article/details/51691212 https://www.cnblogs.com/cy568searchx/p/3 ...
- Gym 101911E "Painting the Fence"(线段树区间更新+双端队列)
传送门 题意: 庭院中有 n 个围栏,每个围栏上都被涂上了不同的颜色(数字表示): 有 m 条指令,每条指令给出一个整数 x ,你要做的就是将区间[ x第一次出现的位置 , x最后出现的位置 ]中的围 ...
- java抽象类和抽象方法
首先应该明确一点的是,抽象方法必须定义在抽象类中. 先看一个抽象类的定义: public abstract class Animal { public abstract void eat(); pub ...
- (贪心)nyoj448-寻找最大数
题目描述: 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 输入描述: 第一行输入一个正整数T,表示 ...
- [USACO07NOV] Milking Time
题目链接 动态规划转化成 DAG 然后拓扑求解的思路 虽然很简单不过感觉这个新思路会很有用! 如果两个事件互不影响并且有先后关系,就可以连一条有向边,跑最长路可以得到最后的最优解 实际上这还是个背包… ...
- CodeForces1073E 数位dp+状压dp
http://codeforces.com/problemset/problem/1073/E 题意 给定K,L,R,求L~R之间最多不包含超过K个数码的数的和. 显然这是一道数位dp,在做的过程中会 ...
- 原生js操作Dom命令总结
常用的dom方法 document.getElementById(“box”);//通过id获取标签 document.getElementsByTagName(“div”);根据标签名获取页面 ...
- Linux最常用的基础命令
Linux最常用的基础命令个人总结 计算机基础知识: 32bit和64bit系统的区别.系统运行机制 32bit=内存的最大寻址空间是2**32,也就是说最大只能使用4GB的内存64bit=内存的最大 ...
- iptables之端口限速
#iptables -A FORWARD -p tcp -m tcp --sport 10000 -m limit --limit 500/sec --limit-burst 1000 -j ACCE ...