当前位置: 首页 > ops >正文

P1106 删数问题 - 洛谷

一、题目信息

1、题目链接:P1106 删数问题 - 洛谷

二、题目分析

1、分析:综合他人题解和自己思考归纳出本题的几个要点并应用到自己的解法中(要点只针对笔者自己的解法,不必须),浅记

  • 考虑保留n-k位数的情况而非去除k位数的情况,原因即我们的目标是留下的数字组成的数的最大者,那就是考虑留下的数了
  • 贪心:
    • 从数串左到右选也即从最高位向最低位选,这样有两个好处:(1)从左到右顺序遍历,简单方便;(2)优先考虑高位的情况,因为高位对整个数大小的影响绝对大于低位。从而选每一位数时存在左边界,左边界左侧的数不能再被选择。
    • 对于每一位,给它一个尽可能小的数,则从0开始选直到9,只有10种选择/情况。从而在确定结果的某一位的数是什么的时候,我们不从数串中找,而是在0~9这10个数中找,同时要满足一定要求(比如至少数串中得有这个数以及这个数在数串中的位置得合适等等),相比于从数串中找清晰而简单
  • 结果的第一位数字应当在数串的前k+1位数字中,第二位数字应当在数串的前k+2位数字中,以此类推,从而选每一位数时存在右边界,只能选择数串中位置不超过右边界的数

2、思路:

  • 遍历一遍数串,记录每个数的位置,则我们从0到9选数的时候就可以知道某个数在数串中的哪些位置有它的身影,如对于数串1283451391,1这个数出现在数串的第1、第7、第10个位置。
  • 从最高位到最低位顺序选择确定,为每一位数选择尽可能小的数。
  • 说不清楚,看代码吧...

三、代码

#include<unordered_map>
#include<queue>
#include<iostream>
using namespace std;int main(){string num_string;int k;cin>>num_string>>k;int retain=num_string.size()-k;unordered_map<int,queue<int>> num_to_loc;for(int i=0;i<num_string.size();i++){int now=num_string[i]-'0';num_to_loc[now].push(i+1);}if(retain==1&&num_to_loc[0].size()>0){cout<<0;return 0;}//数字的可选下标范围。下标从1开始int left=1,right=k+1;  string result="";while(retain>0){for(int i=0;i<=9&&retain>0;i++){   //贪心,从小到大即从0到9依次选if(num_to_loc[i].empty()) continue;int loc=num_to_loc[i].front();while(loc<left){  //排除掉位置loc<left的数,这些数不会再被选到num_to_loc[i].pop();if(num_to_loc[i].empty()){loc=num_string.size()+1;}else{loc=num_to_loc[i].front();}}if(loc<=right&&retain>0){       //找到了一个数if(result!=""||i!=0){      //排除前导0result+='0'+i;}num_to_loc[i].pop();retain--;left=loc+1;right++;            break;  //跳出for循环,下一位继续从0开始找}}}cout<<result;return 0;
}
http://www.xdnf.cn/news/16198.html

相关文章:

  • Multiscale Structure Guided Diffusion for Image Deblurring 论文阅读
  • 用友ERP 反射xss漏洞复现(CVE-2025-2709)
  • [NLP]多电源域设计的仿真验证方法
  • Linux运维新人自用笔记(Rsync远程传输备份,服务端、邮箱和客户端配置、脚本)
  • 编译器-gcc/g++和自动化构建-make/Makefile
  • AI冲击搜索?谷歌说:恰恰相反
  • C语言第 9 天学习笔记:数组(二维数组与字符数组)
  • 优秀案例:基于python django的智能家居销售数据采集和分析系统设计与实现,使用混合推荐算法和LSTM算法情感分析
  • Java 大视界 -- 基于 Java 的大数据分布式存储在工业互联网数据管理与边缘计算协同中的创新实践(364)
  • 矩阵谱分解的证明及计算示例
  • JVM相关面试八股
  • 虚拟机docker elasticsearch启动失败
  • Elasticsearch-ik分析器
  • 三维图像识别中OpenCV、PCL和Open3D结合的主要技术概念、部分示例
  • Java设计模式-代理模式
  • 《Angular+Spring Boot:ERP前端采购销售库存协同架构解析》
  • FalconFS: Distributed File System for Large-Scale Deep Learning Pipeline——论文阅读
  • ReVQ (Quantize-then-Rectify,量化后修正)
  • [MMU] Table walk flow详解
  • IAR编辑器如何让左侧的工具栏显示出来?
  • MCP工具开发实战:打造智能体的“超能力“
  • GaussDB 逻辑备份实操
  • windows11安装wsl装Ubuntu到D盘及可视化页面,安装docker及宝塔面板
  • 初识opencv03——图像预处理2
  • Day 20:奇异值SVD分解
  • Python Day15 面向对象核心特性笔记 及 例题分析
  • 数组toString方法及类型检测修复方案
  • Linux 内核基础统简全解:Kbuild、内存分配和地址映射
  • 【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍
  • 同花顺前端潜在面试题目与答案