1 条题解

  • 0
    @ 2026-10-18 23:39:01

    密码

    思路与复杂度

    提取数字后维护单调栈,遇到更大的数字时删除较小的栈顶;最后删除剩余配额个尾部数字。严格删除 k 个并保留前导零。每个字符最多入栈、出栈一次,时间 O(|s|),空间 O(|s|)。

    正确性与边界

    每次删除首个可改善的位置能让字典序的最早差异变大;若不存在可改善位置,则删尾部。注意全部相同数字和 k=0。

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    int main(){ios::sync_with_stdio(false);cin.tie(nullptr);string s,st;int k;cin>>s>>k;for(char c:s)if(isdigit((unsigned char)c)){while(k&&!st.empty()&&st.back()<c)st.pop_back(),--k;st+=c;}while(k--)st.pop_back();cout<<st<<"\n";}
    
    • 1

    信息

    ID
    844
    时间
    1000ms
    内存
    512MiB
    难度
    普及
    标签
    递交数
    0
    已通过
    0
    上传者