CF - 797C. Minimal string (贪心+栈模拟)

  可以将t串用一个栈模拟,因为t串里的字符是从s串转移到t串的尾部而来,然后u串的字符又是由t串的尾部转移来,所以t串具有后进先出的性质,然后再贪心处理一下,因为要求u串字典序最小,所以当栈顶元素比s串里的所有元素都小时才出栈,否则不出栈。

#include<bits/stdc++.h>
using namespace std;
int cnt[150];
char str[100000+10];
stack<char>s;
int main()
{
    int len;
    memset(cnt,0,sizeof(cnt));
    while(!s.empty()) s.pop();
    cin>>(str+1);
    len=strlen(str+1);
    for(int i=1;i<=len;i++)
        cnt[str[i]]++;
    for(int i=1;i<=len;i++)
    {
        int flag;
        s.push(str[i]);
        cnt[str[i]]--;
        while(!s.empty())
        {
            flag=1;
            for(int j=s.top()-1;j>='a';j--)
                if(cnt[j]>=1)
                {
                    flag=0;
                    break;
                }
            if(!flag) break;
            cout<<s.top();
            s.pop();
        }

    }
    cout<<endl;
    return 0;
}

 

posted @ 2018-08-23 20:47  eason99  阅读(84)  评论(0编辑  收藏  举报