zoukankan      html  css  js  c++  java
  • HDU 3183 Magic Lamp(单调栈)

    题目链接

    题目大意

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

    解题思路

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

    代码

    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;
    }
    
  • 相关阅读:
    json
    ajax
    oracle 分页查询
    NuGet使用
    【EF】Entity Framework使用
    【mssql】增删改查笔记
    【mysql】知识点
    【angularJS】学习笔记
    C# Ninject使用
    【CSS】Table样式
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/13573162.html
Copyright © 2011-2022 走看看