常州市网站建设_网站建设公司_代码压缩_seo优化
2026/1/9 14:38:27 网站建设 项目流程

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

洛谷:P1323 删数问题 - 洛谷

【题目描述】

一个集合有如下元素:1 11是集合元素;若P PP是集合的元素,则2 × P + 1 2\times P+12×P+14 × P + 5 4\times P+54×P+5也是集合的元素。

取出此集合中最小的k kk个元素,按从小到大的顺序组合成一个多位数,现要求从中删除m mm个数位上的数字,使得剩下的数字最大,编程输出删除前和删除后的多位数字。

注:不存在所有数被删除的情况。

【输入】

只有一行两个整数,分别代表k kkm mm

【输出】

输出为两行两个整数,第一行为删除前的数字,第二行为删除后的数字。

【输入样例】

5 4

【输出样例】

137915 95

【算法标签】

《洛谷 P1323 删数问题》 #模拟# #字符串# #贪心# #优先队列# #队列#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong// 定义int为long long类型intk,m,a[30005];// k: 需要生成的序列长度, m: 可以删除的字符数, a: 存储生成的序列priority_queue<int,vector<int>,greater<int>>pq;// 小根堆,用于生成序列string ans;// 合并后的字符串stack<char>sta;// 栈,用于删除字符的贪心算法// 初始化函数:生成特定序列voidinit(){pq.push(1);// 初始元素1入堆for(inti=1;i<=30000;i++)// 生成30000个序列元素{a[i]=pq.top();// 取出当前最小值pq.pop();// 弹出最小值// 根据规则生成新的元素pq.push(2*a[i]+1);pq.push(4*a[i]+5);}}signedmain()// 因为使用了#define int long long,所以用signed main{cin>>k>>m;// 输入k和minit();// 生成序列// 第一部分:将前k个序列元素拼接成字符串for(inti=1;i<=k;i++)ans+=to_string(a[i]);cout<<ans<<endl;// 输出拼接后的字符串// 第二部分:删除m个字符,使剩下的字符串字典序最大for(inti=0;i<ans.size();i++)// 遍历字符串{// 贪心策略:当栈顶字符小于当前字符且还有删除次数时,弹出栈顶while(sta.size()&&sta.top()<ans[i]&&m){sta.pop();m--;}sta.push(ans[i]);// 当前字符入栈}// 处理剩余未删除的字符(如果m>0,从末尾删除)while(m>0&&!sta.empty()){sta.pop();m--;}// 从栈中取出结果字符串string s="";while(sta.size()){s=sta.top()+s;// 注意顺序,栈顶是最后入栈的sta.pop();}cout<<s<<endl;// 输出最终结果return0;}

【运行结果】

5 4 137915 95

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询