#C. [NOIP2008 提高组] 双栈排序

    Type: RemoteJudge 1000ms 128MiB

[NOIP2008 提高组] 双栈排序

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目描述

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

  • 操作 a\verb!a!:将第一个元素压入栈 S1S_1
  • 操作 b\verb!b!:将 S1S_1 栈顶元素弹出至输出序列。
  • 操作 c\verb!c!:将第一个元素压入栈 S2S_2
  • 操作 d\verb!d!:将 S2S_2 栈顶元素弹出至输出序列。

如果一个 1n1\sim n 的排列 PP 可以通过一系列合法操作使得输出序列为 (1,2,,n1,n)(1,2,\cdots,n-1,n),Tom 就称 PP 是一个“可双栈排序排列”。例如 (1,3,2,4)(1,3,2,4) 就是一个“可双栈排序序列”,而 (2,3,4,1)(2,3,4,1) 不是。下图描述了一个将 (1,3,2,4)(1,3,2,4) 排序的操作序列:a,c,c,b,a,d,d,b\texttt {a,c,c,b,a,d,d,b}

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

输入格式

第一行是一个整数 nn

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

输出格式

共一行,如果输入的排列不是“可双栈排序排列”,输出 0

否则输出字典序最小的操作序列,每两个操作之间用空格隔开,行尾没有空格。

4
1 3 2 4
a b a a b b a b
4
2 3 4 1
0
3
2 3 1
a c a b b d

提示

30%30\% 的数据满足:n10n\le10

50%50\% 的数据满足:n50n\le50

100%100\% 的数据满足:n1000n\le1000

2021.06.17 加强 by SSerxhs。hack 数据单独分为一个 subtask 防止混淆。

noip2008 提高第四题

初二竞赛组作业——二分图基础

Not Claimed
Status
Done
Problem
5
Open Since
2024-3-15 8:00
Deadline
2024-5-19 23:59
Extension
24 hour(s)