问题 3390 --煎饼

3390: 煎饼

题目描述

  给定一叠煎饼(n<=30),你要写一个程序计算出如何才能使这叠煎饼自底向上由大至小的排列。给定煎饼的半径作为其尺寸,一叠煎饼的大小各不相同。
为煎饼叠排序是通过一些列的“翻转”动作来完成的。一个翻转动作就是将一个小铲插到煎饼叠中的某两个煎饼之间,然后将小铲上面的所有煎饼翻转(倒转小铲上面的子栈)。每个翻转动作由其开始的位置给出,即小铲上面子栈中最底下一个煎饼的编号。整叠煎饼中最下面一个的位置为1,n个煎饼的叠中最上面一个的位置为n。
一个煎饼叠由一组表示其中各煎饼直径的数构成,它们排列的顺序就是给出的这些数的顺序。
比如下面三个煎饼叠(煎饼8是左边一叠的最上面的一个)
        8           7           2
        4           6           5
        6           4           8
        7           8           4
        5           5           6
        2           2           7
左边一叠可以通过翻转第3个煎饼变成中间一叠的顺序。中间一叠可以通过翻转第1个煎饼变成右边一叠的顺序。


输入

 每叠煎饼独占一行,最上面的在行首,最下面的在行尾,各煎饼中间由空格隔开。

输出

二行,必须在第一行输出原叠的内容,接下来输出一组翻转动作的序列,使得这一叠煎饼自底向上由大至小的排列。输出的翻转动作序列都要由0来结束(表示不再进行翻转)。一旦一叠煎饼已经排好序,就不能再进行任何翻转。

样例输入输出

输入#1 复制
1 2 3 4 5
输出#1 复制
1 2 3 4 5
0
输入#2 复制
5 4 3 2 1
输出#2 复制
5 4 3 2 1
1 0
输入#3 复制
5 1 2 3 4
输出#3 复制
5 1 2 3 4
1 2 0

提示

序号 标题 作者 发表时间 费用 订购数 操作