洛谷 删数的问题 贪心
题目描述
键盘输入一个高精度的正整数 n(不超过 250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 n 和 k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
输入两行正整数。
第一行输入一个高精度的正整数 n。
第二行输入一个正整数 k,表示需要删除的数字个数。
输出格式
输出一个整数,最后剩下的最小数。
输入输出样例
输入 #1复制
175438 4
输出 #1复制
13
说明/提示
用 len(n) 表示 n 的位数,保证 1≤k<len(n)≤250。
注意:去掉若干数字后剩下的数可以存在前导零,而输出时不要输出前导零。
代码:
#include <bits/stdc++.h>
#define MX 1000005
using namespace std;
int main() {
string s;
int k,f = 0;
cin>>s>>k;
int i;
while(k)//删数
{
for(i = 0;s[i] <= s[i+1];)
{
i++;
}
s.erase(i,1);
k--;
}
while(s[0] == '0' && s.size() > 1)//处理前导0
{
s.erase(0,1);
}
cout<<s;
return 0;
}