求帮忙看看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() && 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;
}
```
题意:输入一个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() && 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;
}
```
全部评论
从高到低位,只要这一位比下一位低,就优先删这位,如果没删够,在从低位开始删

这是贪心 不是单调栈吧
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享