求帮忙看看ACM笔试题,高血压了

单调栈做的,用例都过了,提交0%,不知道哪错了
题意:输入一个n位正整数,输入删除的位数m,输入正整数;输出删掉m位后最大的数(相对位置不变);
测试用例: 输入: 5 2  19352 输出: 952;解释: 删掉1和3后最大的数是952
```cpp
#include <bits/stdc++.h>
#include <vector>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    int num;
    cin >> num;
    vector<int> nums(n);
    for (int i = n - 1; i >= 0; i--) {
        nums[i] = num % 10;
        num = num / 10;
    }
    stack<int> st;
    st.push(nums[0]);
    int flag = 0;
    for (int i = 1; i < n; i++) {
        if (flag < m) {
            while (!st.empty() &amp;&amp; st.top() < nums[i]) {
                st.pop();
                flag++;
                if (flag == m) break;
            }
        }
        st.push(nums[i]);
    }
    int ans = 0, cnt = 1;
    while(!st.empty()) {
        ans = ans + st.top() * cnt;
        cnt = cnt * 10;
        st.pop();
    }
    cout << ans << endl;
}
```
全部评论
从高到低位,只要这一位比下一位低,就优先删这位,如果没删够,在从低位开始删
1 回复 分享
发布于 2024-08-08 22:14 广东
这是贪心 不是单调栈吧
1 回复 分享
发布于 2024-08-08 22:02 浙江

相关推荐

04-06 11:24
已编辑
太原学院 测试工程师
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务