Codeforces 797C Minimal string【贪心】

来源:互联网 发布:知乎电子书 kindle 编辑:程序博客网 时间:2024/05/19 17:27

C. Minimal string
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Petya recieved a gift of a string s with length up to105 characters for his birthday. He took two more empty stringst and u and decided to play a game. This game has two possible moves:

  • Extract the first character of s and append t with this character.
  • Extract the last character of t and append u with this character.

Petya wants to get strings s and t empty and string u lexigraphically minimal.

You should write a program that will help Petya win the game.

Input

First line contains non-empty string s (1 ≤ |s| ≤ 105), consisting of lowercase English letters.

Output

Print resulting string u.

Examples
Input
cab
Output
abc
Input
acdb
Output
abdc

题目大意:

给你一个栈,然你找到一个出栈顺序,使得字典序最小。


思路:


逆序维护一个数组minn【i】=x,表示第i个位子后边最小的字符是x.

那么对应维护一个栈,如果此时栈顶字符小于等于minn【此时要加入的元素的位子】,那么就出栈,将栈顶这个字符输出;

同时每个字符都在操作结束后入栈。


Ac代码:

#include<stdio.h>#include<string.h>#include<queue>#include<stack>using namespace std;char ss[100800];int a[100800];int minn[100800];int main(){    while(~scanf("%s",ss))    {        int n=strlen(ss);        memset(minn,0,sizeof(minn));        for(int i=0;i<n;i++)a[i]=ss[i]-'a'+1;        for(int i=n-1;i>=0;i--)        {            if(i==n-1)minn[i]=a[i];            else minn[i]=min(minn[i+1],a[i]);        }        stack<char >s;        for(int i=0;i<n;i++)        {            if(s.size()==0)            {                s.push(ss[i]);            }            else            {                while(!s.empty())                {                    int u=s.top()-'a'+1;                    if(u<=minn[i])                    {                        printf("%c",s.top());                        s.pop();                    }                    else break;                }                s.push(ss[i]);            }        }        while(!s.empty())        {            printf("%c",s.top());            s.pop();        }        printf("\n");    }}









0 0
原创粉丝点击