【问题描述】

一个集合有如下元素:1是集合元素;若P是集合的元素,则2 * P +1,4*P+5也是集合的元素,取出此集合中最小的K个元素,按从小到大的顺序组合成一个多位数,现要求从中删除M个数位上的数字,使得剩下的数字最大,编程输出删除前和删除后的多位数字。

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

【样例输入】

5 4

【样例输出】

137915

95

【解题思路】

首先,我们可以将该问题转化为两个子问题:

1:求2*p+1与4*p+5两个集合中前k个数组成的数。

2:求如何删去m个数字使留下的数最大,并输出该数。

对于子问题1,其实是很好办的,直接将两个集合转化为两个队列,取走两个队列中更小的队首元素,并将其扩展放入到两个集合中,直到取出了k个数。

那么关键在于如何解决子问题2。

既然要使留下的数最大,那么自然是越高位越大越好,于是,对于某一个数字是取还是舍,我们应遵循下面两个原则:

1:如果该数字比其之前的数字大,那么我们应尽量舍去之前的数字。

2:如果舍去的数字已经有m个了,那就不必舍去了。

因此,对于每一个数字,我们应把它与它前面的数字进行比较,如果满足上述两个原则,那么就取代其之前的数。详见代码。

【代码实现】

var t,k:array[..] of longint;
sta:array[..] of char;
t1,t2,i,n,m,l,top,r1,r2:longint;
s,st:ansistring;
begin
readln(n,m);
i:=;
t[]:=;
k[]:=;
t1:=;
t2:=;
r1:=;
r2:=;
s:='';
while i<n do
if t[r1]<k[r2] then
begin
inc(i);
str(t[r1],st);
s:=s+st;
inc(t1);
t[t1]:=*t[r1]+;
inc(t2);
k[t2]:=*t[r1]+;
inc(r1);
end
else
begin
inc(i);
str(k[r2],st);
s:=s+st;
inc(t1);
t[t1]:=*k[r2]+;
inc(t2);
k[t2]:=*k[r2]+;
inc(r2);
end;
writeln(s);//解决子问题1
l:=length(s);
m:=l-m;
sta[]:=chr();
top:=;
for i:= to l do
begin
while(s[i]>sta[top-])and(top+l-i>m)do//满足两个原则,取代
dec(top);
sta[top]:=s[i];
inc(top);
end;
for i:= to top- do
if sta[i]<>'' then
break;//注意:前导0不要输出
for i:=i to m do
write(sta[i]);
writeln;
end.

集合删数 (vijos 1545) 题解的更多相关文章

  1. [Swust OJ 403]--集合删数

    题目链接:http://acm.swust.edu.cn/problem/403/ Time limit(ms): 5000 Memory limit(kb): 65535   Description ...

  2. 题解 洛谷 P5324 【[BJOI2019]删数】

    先考虑对于一个序列,能使其可以删空的的修改次数. 首先可以发现,序列的排列顺序是没有影响的,所以可以将所有数放到桶里来处理. 尝试对一个没有经过修改的可以删空的序列来进行删数,一开始删去所有的\(n\ ...

  3. 删数方案数(regex)

    [题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同 ...

  4. 【BZOJ2734】【HNOI2012】集合选数(状态压缩,动态规划)

    [BZOJ2734][HNOI2012]集合选数(状态压缩,动态规划) 题面 Description <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所 ...

  5. [BJOI2019]删数(线段树)

    [BJOI2019]删数(线段树) 题面 洛谷 题解 按照值域我们把每个数的出现次数画成一根根的柱子,然后把柱子向左推导,\([1,n]\)中未被覆盖的区间长度就是答案. 于是问题变成了单点修改值,即 ...

  6. 【BZOJ-2732】集合选数 状压DP (思路题)

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1070  Solved: 623[Submit][Statu ...

  7. codevs4096 删数问题

    题目描述 Description 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N 和S,寻找一种方案使得剩下的数字组成的新数最小. 输入 ...

  8. bzoj 2734: [HNOI2012]集合选数 状压DP

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 560  Solved: 321[Submit][Status ...

  9. 1145: 零起点学算法52——数组中删数II

    1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 293 ...

随机推荐

  1. 蓝桥杯---剪格子(DFS&BFS)(小总结)

    问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...

  2. JQuery上传插件uploadify整理(Options)

    下载  现在有两个版本了,我此次使用的依然是Flash版本的,虽然现在绝大部分浏览器都兼容HTMKL5,目前位置,除了做手机项目外,一般我们项目中不允许使用HTML5标签. 属性介绍(Options) ...

  3. std::string::npos mean

    std::string::npos 表示 no position, 没位置, 没找到

  4. FPS学习记录

    最近在网上查了一些FPS的相关知识,在此和大家一起分享.FPS(Frames Per Second):每秒传输帧数,它是图像领域中的一个术语. Frames Per Second更确切的解释是“每秒中 ...

  5. 剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充

    原文链接:http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-why-its-so-fast_22.html 需FQ 计算机入门   ...

  6. Django中级篇之模板语言

    模板 一.引用变量 模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户. {{ xxx }} 二.标签 用{%  %} ...

  7. 学习练习 java 实例属性 静态属性

    package com.hanqi; public class Test11Car11 { //静态 //实例属性 private int m = 0; //静态属性 //所有实例共有的,在内存里只有 ...

  8. 《App研发录》知识点汇总

    原文链接:http://www.jianshu.com/p/fc8c4638937e <App研发录>这部书是包建强写的,说来也巧,在读这边书之前在看池建强的<Mac 人生元编程&g ...

  9. java 学习之(基本语法)

    强类型:1所有变量必须先定义,再使用.2变量所赋值必须为与其类型匹配的类型. 标识符与关键字   分隔符:;{},[],() space .  用法与.net一样 标识符规则:以_  字母 $符开头 ...

  10. java中byte转换int时为何与0xff进行与运算

    在剖析该问题前请看如下代码 public static String bytes2HexString(byte[] b) {  String ret = "";  for (int ...