1367_双栈排序

2022-5-16 18:17| 发布者: Hocassian| 查看: 52| 评论: 0|原作者: 肇庆学院ACM合集

摘要:
C:\Users\Administrator\Downloads\2019-10-12-10-14-2-89503823569699-Problem List-采集的数据-后羿采集器.html

Pro.ID

1367

Title

双栈排序

Title链接

http://10.20.2.8/oj/exercise/problem?problem_id=1367

AC

0

Submit

25

Ratio

0.00%

时间&空间限制

  • Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others)
  • 描述

    Tom最近在研究一个有趣的排序问题。如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序。

    操作a      如果输入序列不为空,将第一个元素压入栈S1

    操作b      如果栈S1不为空,将S1栈顶元素弹出至输出序列

    操作c      如果输入序列不为空,将第一个元素压入栈S2

    操作d      如果栈S2不为空,将S2栈顶元素弹出至输出序列

    如果一个1~n的排列P可以通过一系列操作使得输出序列为1,2,…,(n-1),n,Tom就称P是一个"可双栈排序排列"。例如(1,3,2,4)就是一个"可双栈排序序列",而(2,3,4,1)不是。下图描述了一个将(1,3,2,4)排序的操作序列:a, c, c, b, a, d, d, b


    当然,这样的操作序列有可能有几个,对于上例(1,3,2,4),a, c, c, b, a, d, d, b 是另外一个可行的操作序列。Tom希望知道其中字典序最小的操作序列是什么。

    输入

    输入有多组Case,每个Case第一行是一个整数n ( n ≤ 1000 )。

    第二行有n个用空格隔开的正整数,构成一个 1 ~ n 的排列。

    输出

    Description

    Tom最近在研究一个有趣的排序问题。如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序。

    操作a      如果输入序列不为空,将第一个元素压入栈S1

    操作b      如果栈S1不为空,将S1栈顶元素弹出至输出序列

    操作c      如果输入序列不为空,将第一个元素压入栈S2

    操作d      如果栈S2不为空,将S2栈顶元素弹出至输出序列

    如果一个1~n的排列P可以通过一系列操作使得输出序列为1,2,…,(n-1),n,Tom就称P是一个"可双栈排序排列"。例如(1,3,2,4)就是一个"可双栈排序序列",而(2,3,4,1)不是。下图描述了一个将(1,3,2,4)排序的操作序列:a, c, c, b, a, d, d, b


    当然,这样的操作序列有可能有几个,对于上例(1,3,2,4),a, c, c, b, a, d, d, b 是另外一个可行的操作序列。Tom希望知道其中字典序最小的操作序列是什么。

    Input

    输入有多组Case,每个Case第一行是一个整数n ( n ≤ 1000 )。

    第二行有n个用空格隔开的正整数,构成一个 1 ~ n 的排列。

    Output

    每组Case输出一行,如果输入的排列不是"可双栈排序排列",输出数字0;否则输出字典序最小的操作序列,每两个操作之间用空格隔开,行尾没有空格。

    Sample Input

    4
    1 3 2 4
    4
    2 3 4 1

    Sample Output

    a b a a b b a b
    0

    Source

    样例输入

    4
    1 3 2 4
    4
    2 3 4 1

    样例输出

    a b a a b b a b
    0

    提示

    作者


    路过

    雷人

    握手

    鲜花

    鸡蛋

    最新评论

    返回顶部