2489: 【普及/提高-】【P1106】删数问题

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:8 解决:3

题目描述

键盘输入一个高精度的正整数 lns="http://www.w3.org/1998/Math/MathML">(不超过 lns="http://www.w3.org/1998/Math/MathML">250 位),去掉其中任意 lns="http://www.w3.org/1998/Math/MathML"> 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 lns="http://www.w3.org/1998/Math/MathML"> 和 lns="http://www.w3.org/1998/Math/MathML">,寻找一种方案使得剩下的数字组成的新数最小。

输入

输入两行正整数。

第一行输入一个高精度的正整数 lns="http://www.w3.org/1998/Math/MathML">

第二行输入一个正整数 lns="http://www.w3.org/1998/Math/MathML">,表示需要删除的数字个数。

输出

输出一个整数,最后剩下的最小数。

样例输入 复制

175438 
4

样例输出 复制

13

提示

#include<bits/stdc++.h>
using namespace std;

int main(){
    string s,ans="";
    int k;
    cin>>s>>k;

    int l=s.length();
    int m=l-k;  //生成字符串长度 
    int p=0;  //当前已生成字符串长度 
    int i=0;  //当前已选字符下标 
    while (ans.length()<m){
		int j,t=i;
		for (j=i;j<=l-m+p;j++) {
			if (s[j]<s[t])
			    t=j;  //最小字符下标 
		}
		ans+=s[t];
		i=t;
		i++;
		p++;
		
	}
    int idx=0;
    while (ans[idx]=='0') idx++;
    if (idx!=0 && ans!="0")
        ans=ans.substr(idx);
    cout<<ans<<endl;
	return 0;
}