题目描述
键盘输入一个高精度的正整数 N(不超过 250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N 和 k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
n(高精度的正整数 )。
k(需要删除的数字个数 )。
输出格式
最后剩下的最小数。
题解
首先,直接贪心删去最小的是错的,可以举出反例 N=1329,k=1 时答案应该是 129 而不是 132。
考虑去维护一个单调不减栈,每次入栈的时候进行判断,依次删去 k 个不满足不减的元素,可以保证最后一定是最小
代码
cpp
1 |
|
注意
- 注意到第 11 行
k && sta.size() && sta.top() > 0 && s[i] - '0' < sta.top()
中sta.size()
和sta.top()
不能反过来,否则 RE