题库/S0041

#S0041. 【08NOIP提高组】双栈排序

    传统题 难度: 普及+ 标签>一本通二分图与染色判定栈与后进先出交换论证与贪心反例
时间限制1000 ms
内存限制64 MiB
通过率—0 / 0 次提交
题目描述 查看题解 开始编程Alt+E

S0041 · 【08NOIP提高组】双栈排序

退出在线编程模式
普及+ 读懂题意,让每一次思考成为成长。
时间限制1000 ms
内存限制64 MiB
通过率—0 / 0 次提交

题目描述

Tom最近在研究一个有趣的排序问题。如图所示,通过22个栈S1S_1和S2S_2,Tom希望借助以下4种操作实现将输入序列升序排列。 题面插图 操作aa 如果输入序列不为空,将第一个元素压入栈S1S_1 操作bb 如果栈S1S_1不为空,将S1S_1栈顶元素弹出至输出序列 操作cc 如果输入序列不为空,将第一个元素压入栈S2S_2 操作dd 如果栈S2S_2不为空,将S2S_2栈顶元素弹出至输出序列 如果一个1~n1~n的排列PP可以通过一系列操作使得输出序列1,2,…,(n−1),n1,2,…,(n-1),n,Tom就称PP是一个“可双栈排序排列”。例如(1,2,3,41,2,3,4)就是一个“可双栈排序排列”,而(2,3,4,12,3,4,1)不是。下图描述了一个将(1,3,2,41,3,2,4)排序的操作序列: 题面插图 当然,这样的操作序列有可能多个,对于上例(1,2,3,41,2,3,4),是另外一个可行的操作序列。Tom希望知道其中字典序最小的操作序列是什么。

输入

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

输出

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

输入样例

4
1 3 2 4

输出样例

a b a a b b a b

提示

【输入输出样例2】 输入:

4
2 3 4 1

输出:

0

【输入输出样例3】 输入:

3 
2 3 1

输出:

a c a b b d

【限制】 30%的数据满足:n≤10 50%的数据满足:n≤50 100%的数据满足:n≤1000

评测数据说明

本题使用按题意独立构造、以独立程序核对的训练数据及公开样例,共6个测试点,非原站或官方原始数据。总分100分。