1 条题解
-
1
来自出题人的题解
大体上来看,这道题就是要将一个乱序的数列进行排序。所以我们要找的是一种可以在三个栈上面进行的排序:
20分做法:
圆盘数小于等于 ,随便玩。40分做法:
圆盘数小于等于 ,考虑每次暴力的找出最大的圆盘放在最右边,单词操作期望为 ,操作总复杂度为 。70分做法:
考虑其他 的排序方法,我们只有两个空闲的柱子,所以排序应该和二进制或二分有关,考虑二进制基排,从最后一位开始考虑,当前位为0的放在B上面,当前位为1的放在C上面,最后全部放回A,但是移动 次,进行 次排序,总共操作数上限是 , 会被卡掉。满分做法:
考虑另一种排序方法:分治,将当先连续个盘子分成较大的和较小的两个均匀部分,分别进行处理。处理方式是:将一个段盘子从fro借助串las顺序/逆序移动到to上。自己手动推演一下顺序和逆序的过程,在这里就不给出。 考虑操作次数,我们可以让放在下方的一部分在完成之后直接移到to上,也就意味着单次操作总共移动了 次,总共有 层递归,总操作数为 , 可过。
- 1
信息
- ID
- 2
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 1
- 上传者