QOJ.ac

QOJ

Límite de tiempo: 2.0 s Límite de memoria: 256 MB Puntuación total: 100

#9384. 编辑程序

Estadísticas

小 Zhenya 教她的机器人 Murzik 如何计算编辑距离。众所周知,两个字符串 $s$ 和 $t$ 之间的编辑距离(或称 Levenshtein 距离)是将 $s$ 转换为 $t$ 所需的最少操作次数。这里的每一步操作必须是:从字符串中删除任意单个字符、在任意位置插入任意单个字符,或将任意单个字符更改为其他任意单个字符。例如,字符串 “sport” 和 “point” 之间的编辑距离是 3:我们可以删除字母 “s”,将 “r” 改为 “i”,并在其后插入 “n”。

Murzik 还很年轻,只有在数据是二进制(由 0 和 1 组成的字符串)时才能正常工作。不过,机器人的程序也可以包含其他字符。Zhenya 为 Murzik 准备了一个模块,通过练习帮助它理解这个概念。该模块以一个由 0 和 1 组成的字符串 $s$ 作为输入数据,以字符串 $p$ 作为程序。机器人将指针放在字符串 $s$ 的左边缘(第一个字符之前),并从左到右逐步运行程序。程序中的字符对应以下步骤:

  • “.”:将指针向右移动一个字符。
  • “x”:删除指针后的字符。
  • “0”:在指针位置插入字符 “0”,并将指针置于其右侧。
  • “1”:在指针位置插入字符 “1”,并将指针置于其右侧。
  • “^”:将指针后的字符更改为相反字符,并将指针置于其右侧。

当删除一个字符时,字符串的剩余部分会靠拢,使得中间没有空位。当添加一个字符时,各部分会向两侧移动,为新字符腾出空间。如果指针右侧没有字符,则任何对指针右侧字符进行操作的程序指令都是无效的。

Zhenya 选择了两个长度均为 $n$ 的二进制字符串 $s$ 和 $t$,现在想要构造一个有效的程序,使得在字符串 $s$ 上运行该程序后,Murzik 能得到字符串 $t$,且指针位于字符串的最后一个字符之后。

除简单的指针移动外,所有步骤都是编辑距离定义中的操作。“.” 步骤不被视为操作。对于她的例子,Zhenya 想要构造任何操作次数严格小于 $n$ 的程序:不需要最小化操作次数。当然,对于短字符串,只要存在这样的程序,找到它很容易,但 Zhenya 开始思考:当字符串包含数十万个字符时,如何构造这样的程序?

解决 Zhenya 问题的通用版本。给定长度均为 $n$ 的二进制字符串 $s$ 和 $t$,找到任何能让 Murzik 将 $s$ 转换为 $t$ 且操作次数严格小于 $n$ 的程序,或者确定不存在这样的程序。请记住,程序运行结束后,指针必须位于字符串的最后一个字符之后。

输入格式

输入的第一行包含一个二进制字符串 $s$,第二行包含一个二进制字符串 $t$。保证 $s$ 和 $t$ 包含相同数量的字符 $n$ ($1 \le n \le 10^6$)。

输出格式

输出一行。如果没有合适的程序,该行必须包含单个字符 “-” (ASCII 码 45)。否则,输出任何合适的程序,由字符 “.x01^” (ASCII 码 46, 120, 48, 49, 94) 组成。操作次数必须严格小于 $n$,但不要求是最小可能的。程序运行结束后,指针必须位于字符串的最后一个字符之后。

样例

样例输入 1

0011010
1100100

样例输出 1

xx...^10.

样例输入 2

1
0

样例输出 2

-

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.