堆栈状态图显示了如何将一个堆栈上的值更改为另一个堆栈上的值。例如,这是一个堆栈状态图:
3 0 2 1 0
这意味着有一个堆栈最初包含3个值(3
部分)。这些值的索引范围是0到2,顶部是0 2 1 0
。下一部分0 2 1 0
描述了堆栈的最终状态:最初位于堆栈顶部的值也已复制到背面。
这些转换发生在支持多种数据类型的堆栈上:
- “值”类型,最初是堆栈上的值。它可以是字符串,整数等,但是不需要知道其值。
- “列表”类型,它是包含任何数据类型的值的列表。
为了对此转换建模,允许执行以下操作:
S
:交换堆栈顶部的两个值:2 1 0
→2 0 1
D
:将值复制到堆栈顶部:1 0
→1 0 0
R
:删除堆栈上的最高值。2 1 0
→2 1
L
:将最高值变成包含该值的一元列表:2 1 0
→2 1 (0)
C
:串联堆栈中的前两个列表:2 (1) (0)
→2 (1 0)
U
:将列表中的所有值放入堆栈:2 (1 0)
→2 1 0
这些等效于欠载命令~ : ! a * ^
如果不使用其他命令,。
S
,D
,R
,和L
可以与在叠层的顶部上的任何值使用,但C
并U
必须对堆栈功能的顶部列表。甲提交其产生的序列尝试瓶坯无效操作(如D
在一个空栈或U
非列表上)是错误的,并且必须严惩固定。
要解决堆栈状态图,请找到将正确地将初始堆栈状态转换为新状态的一系列命令。例如,一种解决方案3: 0 2 1 0
是LSLCSLCULSLCLSLDCSC USLCU
:
2 1 0
L 2 1 (0)
S 2 (0) 1
L 2 (0) (1)
C 2 (0 1)
S (0 1) 2
L (0 1) (2)
C (0 1 2)
U 0 1 2
L 0 1 (2)
S 0 (2) 1
L 0 (2) (1)
C 0 (2 1)
L 0 ((2 1))
S ((2 1)) 0
L ((2 1)) (0)
D ((2 1)) (0) (0)
C ((2 1)) (0 0)
S (0 0) ((2 1))
C (0 0 (2 1))
U 0 0 (2 1)
S 0 (2 1) 0
L 0 (2 1) (0)
C 0 (2 1 0)
U 0 2 1 0
您的任务是编写一个带有堆栈状态图并输出解决方案的程序。
测试用例
2 1 0 ->
3 2 0 -> SR
9 -> RRRRRRRRR
2 0 1 0 -> LSLCDCUR
2 0 1 1 -> SD
6 2 -> RRSRSRSR
5 0 1 2 3 4 -> LSLCSLCSLCSLCU
4 2 0 1 3 2 -> LSLCSLSCSLCULSLSCSLSCLSLDCSCUSLCU
这是代码高尔夫球,因此最短的有效答案(以字节为单位)获胜。
C
堆栈的顶部和第二位置列出?还是第二个位置的元素可以添加到顶部列表中?
C
两个职位都需要清单。串联一个值和一个列表是没有意义的。