本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。
欢迎大家订阅我的专栏:算法题解:C++与Python实现!
附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总
【题目来源】
洛谷:[P8082 COCI 2011/2012 #4] KEKS - 洛谷
【题目描述】
给定正整数N , K N,KN,K和一个N NN位数,求在N NN位数中删除K KK位后剩下的数的最大值。
【输入】
第一行,两个整数N , K N,KN,K。
第二行,一个N NN位整数。保证没有前导0 00。
【输出】
输出剩下的数的最大值。
【输入样例】
4 2 1924【输出样例】
94【算法标签】
《洛谷 P8082 KEKS》 #栈# #单调栈# #COCI(克罗地亚)# #2011#
【代码详解】
#include<bits/stdc++.h>usingnamespacestd;intn,k;// n: 字符串长度, k: 需要删除的字符数stack<char>sta;// 单调栈string ans,s;// ans: 结果字符串, s: 输入字符串intmain(){cin>>n>>k>>s;// 输入长度、删除字符数、字符串for(inti=0;i<s.size();i++)// 遍历字符串{// 当栈非空、栈顶字符小于当前字符、还有删除次数时while(sta.size()&&sta.top()<s[i]&&k){sta.pop();// 弹出栈顶k--;// 删除次数减1}sta.push(s[i]);// 当前字符入栈// 如果删除次数用完了if(k==0){// 将栈中所有字符加入结果while(sta.size()){ans=sta.top()+ans;// 从栈顶到栈底构建字符串sta.pop();}// 将剩余字符加到结果后面for(intj=i+1;j<s.size();j++)ans+=s[j];break;// 结束循环}}cout<<ans<<endl;// 输出结果return0;}【运行结果】
4 2 1924 94