AGC007F Shik and Copying String
题意:定义字符串的复制操作如下 :
将字符串
现在给出字符串
首先特判
考虑
假设我们得知了对应关系和所需步数,那么可以采取这样的策略:先一直尽量右移,直到移动到需要覆盖的左边界处,然后向下到达底线,然后横向覆盖。(实际上就是让路径尽量靠右)
如图:
不难证明这是最优策略。
考虑我们得知了对应关系,如何得到最优步数。
我们从后往前考虑每个
具体地,用队列维护上一条路径的所有(右侧)转折点。这些转折点的横纵坐标都是单调增加的。
当
末端弹出(pop)那些横坐标在
然后,所有转折点都向左下方移动一位。
若起点衔接不紧密,则会新增(push)一个转折点。如图:
(深蓝色是上一条路径的转折点,深红色是新路径的转折点)
答案是所有转折点的纵坐标的最大值
若事先未给定匹配关系,从后往前考虑
复杂度为