1 条题解
-
0
题解
思路
把序列从左到右的第 个元素翻转,记变换后的当前序列为 ,并对目标序列 做同样的变换得到 。
做法
原操作 A 在 上恰好变成在开头加入 ;原操作 B 则在末尾加入一个只由操作前长度奇偶性决定的数,原长度为偶数时加入 ,为奇数时加入 。所以 必须为 ;若 全为 ,显然可以构造。否则设 是第一个 ,那么从 开始的后缀必须是长度为 的交替序列 的子序列:这些被选中的位置对应操作 B,其余位置对应在开头补 的操作 A。反过来,只要这个子序列关系成立,按此对应选择两类操作就一定能构造出 ,进而构造出原序列 。
用一个指针在交替序列中从左到右贪心匹配该后缀,每个元素都取当前能匹配它的最早位置;这个选择给后续元素留下的空间最多,因此贪心匹配成功当且仅当存在所需子序列。
复杂度
两个指针都只向右移动,总时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1568
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者