首页 > 其他 > 详细

HDU 3183A Magic Lamp(单调栈)

时间:2020-08-27 20:40:24      阅读:51      评论:0      收藏:0      [点我收藏+]

题目链接

题目大意

??给一串数字要求删除几个数字之后输出最少的数字。

解题思路

??很明显假如前一位比后一位大的话,删除前一位结果更优,如果剩下的是个不下降序列还能删的话就从后往前删,用单调栈就能很简单的解决。

代码

const int maxn = 1e6+10;
const int maxm = 2e2+10;
char str[maxn]; int k;
stack<char> sk; string s;
int main() {
    IOS;
    while(cin >> str >> k) {
        int len = strlen(str);
        if(len==k) {
            cout << "0" << endl; continue;
        }
        for (int i = 0; str[i]; ++i) {
            while(k && !sk.empty() && sk.top()>str[i]) --k, sk.pop();
            sk.push(str[i]);
        }
        while(k--) sk.pop();
        while(!sk.empty()) s += sk.top(), sk.pop();
        while(s.size()!=1 && s.back()==‘0‘) s.pop_back();
        reverse(s.begin(), s.end());
        cout << s << endl; s.clear();
    }
    return 0;
}

HDU 3183A Magic Lamp(单调栈)

原文:https://www.cnblogs.com/shuitiangong/p/13573162.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!