链接:https://ac.nowcoder.com/acm/contest/11471/E
来源:牛客网
这一天Kadia与Majiagou在教学弟,
突然提出了一个问题 给你一个超大的数字 让你从中删掉几位 怎么让他最小?
这种签到题不会还有人写不出来吧 不会吧不会吧
题解:考虑单调栈,如果新来的比栈顶元素小就退栈。当然为了省事就用deque写了。
#include<bits/stdc++.h>
using namespace std;
deque<char> s;
string str;
int k;
int main(){
cin>>str>>k;
s.push_back(str[0]);
int c=k;
for(int i=1;i<str.size();i++){
while(!s.empty() && (str[i]-'0')<(s.back()-'0') && c>0){
c--;s.pop_back();
}
s.push_back(str[i]);
// s.push(str[i])
}
bool f=0;
for(int i=0;i<s.size()-c;i++) {
if(f || s[i]!='0' || i==s.size()-c-1) putchar(s[i]);
if(s[i]!= '0') f=1;
// putchar(s[i]);
}
return 0;
}