模拟栈+贪心
贪心策略:
1.优先删除高位的数字
2.尽可能地删除较大的数字(并不意味着所有的情况都是将最大的k个数字删除)
反例:10200 1
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 15;
string num;
int k, tt;
char stk[N];
int main() {
cin >> num >> k;
// 删除数字
for (int i = 0; i < num.size(); i ++) {
while (tt && k > 0 && stk[tt] > num[i]) {
tt --;
k --;
}
stk[++tt] = num[i];
}
// 如果k>0还要继续删
while (k > 0 && tt) {
tt --;
k --;
}
string res = "";
while (tt) {
// 注意低位数先出栈
res = stk[tt--] + res;
}
// 去掉前导0
while (res.size() > 1 && res[0] == '0') {
res.erase(res.begin());
}
cout << res << endl;
return 0;
}