CF936C Lock Puzzle 构造

传送门


好久不做构造题脑子都僵化了qwq

无解的条件是(s)包含的字符可重集和(t)包含的字符可重集不相等,相等的时候下文会给出一种一定可行的构造方案。

考虑增量构造。定义某个字符串(x)的反串为(x'),设已经构造完成的串为(S)(x)(y)是即将拼合在(S)上的两个字符,(.)是其他的无用字符

那么我们通过以下步骤将(x)(y)拼合:

(.....x.....S ightarrow S'..........x ightarrow xS'..........)

(xS'.....y.... ightarrow ....yxS'..... ightarrow .........yxS')

这样我们通过(4)步把(y)(x)拼在(S)之前并将(S)翻转。我们可以通过这样的步骤不断地增量构造直到构造出(t),需要的步数是(2n+O(1))的。

代码

原文地址:https://www.cnblogs.com/Itst/p/10877292.html