题目描述
【题目背景】
明朝后期,由于皇帝腐朽无能,宦官专权,政治黑暗腐败。官僚地主霸占了全国绝大部 分的良田沃土,很多农民失去了土地,政府还不断地向农民征收赋税,困苦不堪的农民又遭 到蝗灾、旱灾等自然灾害。在这种情况下,农民起义迅速地在全国酝酿,公元 1627 年,农 民起义首先在灾情严重的陕北爆发。农民战争发展迅猛,短短几年内,就涌现出几十支起义 军,其中以高迎祥领导的起义军规模最大。高迎祥死后,起义军主要有两支:一支由张献忠 率领,另一支由李自成率领。
1641 年,李自成起义军攻占了洛阳,活捉并杀死了福王朱常洵,没收王府中的财物, 分给老百姓。1644 年,李自成在西安建立了大顺政权,同年,乘胜进攻北京,明朝最后一 个皇帝崇祯在煤山(今北京景山)上吊自杀,三月,李自成大军占领了北京。
农民军进了北京之后,严整军纪。大顺政权命令明朝的贵族、官僚、富户交出大量钱财, 还镇压了一批罪大恶极的达官贵人,大顺政权控制了长城以南、淮河以北的广大地区。
李自成进北京的消息传到关外,满清摄政王多尔衮急忙率兵南下,降服了驻守山海关的 明将吴三桂。不久,李自成亲自率农民军同吴三桂的军队和清军在山海关展开大战,农民军 战败。 李自成被迫率军撤出北京,转战于河南、陕西等地。1645 年,李自成战死于湖北九 宫山。
【问题描述】
传说当年闯王战败,曾经将在北京夺得的财物汇集在一起,埋在淮河以南的某处地方。 不久之前,CZYZ 的天才国一少年 NKF 发现惊天秘密,闯王的宝藏就在 CZYZ 下面。NKF 单枪 匹马闯入其中,过五关斩六将终于到达最后一关,结果竟然看到门上有这样一个题目:一个 长度为 N 的数字串,要求在这串数字中删去 K 个数字使剩下的数最小。这实在是太简单了, NKF 决定还是决定把这个任务交给你们这些学弟学妹,看看你们和他当初的差距有多大~
输入
输入文件 treasure.in 只有两行。
第一行包含一个 N 位的整数,每一位为 0-9 中的一个,不含前导 0。
第二行包含 1 个正整数 K,具体含义如题中所示。
输出
输出文件 treasure.out 只有一行,为删数后最小的数,不含前导 0。
特别的,如果删数后最小的数为 0,请输出一个 0,不含前导 0。
样例输入
20131
3
样例输出
1
样例解释:删掉数字 A 的第 1 3 4 位,得到数字 B 为“01”,去除前导 0。
数据范围限制
【数据范围】
对于 50%的数据,N<=100000;
【题目背景】
明朝后期,由于皇帝腐朽无能,宦官专权,政治黑暗腐败。官僚地主霸占了全国绝大部 分的良田沃土,很多农民失去了土地,政府还不断地向农民征收赋税,困苦不堪的农民又遭 到蝗灾、旱灾等自然灾害。在这种情况下,农民起义迅速地在全国酝酿,公元 1627 年,农 民起义首先在灾情严重的陕北爆发。农民战争发展迅猛,短短几年内,就涌现出几十支起义 军,其中以高迎祥领导的起义军规模最大。高迎祥死后,起义军主要有两支:一支由张献忠 率领,另一支由李自成率领。
1641 年,李自成起义军攻占了洛阳,活捉并杀死了福王朱常洵,没收王府中的财物, 分给老百姓。1644 年,李自成在西安建立了大顺政权,同年,乘胜进攻北京,明朝最后一 个皇帝崇祯在煤山(今北京景山)上吊自杀,三月,李自成大军占领了北京。
农民军进了北京之后,严整军纪。大顺政权命令明朝的贵族、官僚、富户交出大量钱财, 还镇压了一批罪大恶极的达官贵人,大顺政权控制了长城以南、淮河以北的广大地区。
李自成进北京的消息传到关外,满清摄政王多尔衮急忙率兵南下,降服了驻守山海关的 明将吴三桂。不久,李自成亲自率农民军同吴三桂的军队和清军在山海关展开大战,农民军 战败。 李自成被迫率军撤出北京,转战于河南、陕西等地。1645 年,李自成战死于湖北九 宫山。
【问题描述】
传说当年闯王战败,曾经将在北京夺得的财物汇集在一起,埋在淮河以南的某处地方。 不久之前,CZYZ 的天才国一少年 NKF 发现惊天秘密,闯王的宝藏就在 CZYZ 下面。NKF 单枪 匹马闯入其中,过五关斩六将终于到达最后一关,结果竟然看到门上有这样一个题目:一个 长度为 N 的数字串,要求在这串数字中删去 K 个数字使剩下的数最小。这实在是太简单了, NKF 决定还是决定把这个任务交给你们这些学弟学妹,看看你们和他当初的差距有多大~
输入
输入文件 treasure.in 只有两行。
第一行包含一个 N 位的整数,每一位为 0-9 中的一个,不含前导 0。
第二行包含 1 个正整数 K,具体含义如题中所示。
输出
输出文件 treasure.out 只有一行,为删数后最小的数,不含前导 0。
特别的,如果删数后最小的数为 0,请输出一个 0,不含前导 0。
样例输入
20131
3
样例输出
1
样例解释:删掉数字 A 的第 1 3 4 位,得到数字 B 为“01”,去除前导 0。
数据范围限制
【数据范围】
对于 50%的数据,N<=100000;
对于 100%的数据,N<=5000000,0<=K<=N。
总结:
只需要用西藏难题的方法,从左往右找,因为我们要保证位数和开头要最小,那么只需要找到每个位比下一个大的,然后删掉再从头找,知道找到k个为止,就行了。
(ps:但是用字符串会超时,因为删掉字符串一位,等于把后面的都向前移一位,你说慢不慢!所以我们需要用链表)
var
s:ansistring;
n,i,len:longint;
a:array[0..5000000,1..3]of longint;
begin
assign(input,'treasure.in');reset(input);
assign(output,'treasure.out');rewrite(output);
readln(s);
readln(n);
a[0,3]:=1;
for i:=1 to length(s) do
begin
val(s[i],a[i,1]);
a[i,2]:=i-1;
a[i,3]:=i+1;
end;
len:=length(s);
while n>0 do
begin
i:=a[0,3];
while (a[i,1]<=a[a[i,3],1]) do
i:=a[i,3];
a[a[i,2],3]:=a[i,3];
a[a[i,3],2]:=a[i,2];
len:=len-1;
n:=n-1;
end;
i:=a[0,3];
while i<=len do
begin
if a[i,1]=0 then
begin
a[a[i,2],3]:=a[i,3];
a[a[i,3],2]:=a[i,2];
dec(len);
end
else
break;
i:=a[i,3];
end;
i:=a[0,3];
while i<=length(s) do
begin
write(a[i,1]);
i:=a[i,3]
end;
close(input);
close(output);
end.