QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 256 MB Total points: 100

#17840. 摩尔斯电码

Statistics

在摩尔斯电码中,每个字母都由“点”(dot)和“划”(dash)组成的序列表示。然而,单凭这一点还不足以通过无线电传输文本。此外,摩尔斯电码还定义了点和划的持续时间,以及它们之间各种不同的停顿时间。

在本题中,我们将处理在发送端使用摩尔斯电码编码的数字化无线电信号。该信号表示为一个由 +(加号)和 -(减号)字符组成的字符串。每个字符定义了在相应的时间滴答(tick)内是否有声音:加号表示有声音,减号表示无声音。

为了便于讨论,假设摩尔斯电码有五种类型的元素。这些元素根据下表写入信号中:

信号 元素 含义
+ “点”(dot) 1 个滴答内有声音
+++ “划”(dash) 3 个滴答内有声音
- 字母内部停顿 1 个滴答内无声音
--- 字母之间停顿 3 个滴答内无声音
----- 单词之间停顿 5 个滴答内无声音

例如,使用标准拉丁摩尔斯电码,HELLO WORLD 这两个单词将被编码为一个包含 63 个元素、共 109 个滴答的信号:

请注意,单词之间有 5 个滴答的停顿,并且在文本的开头和结尾没有任何停顿或特殊元素。

众所周知,自动数字化过程会产生误差,从而使信号难以解码。该过程可以将任何元素的长度缩短或延长 1 个滴答,但长度为 1 个滴答的元素不能变得更短。

给你一个词典和一个数字化信号。请找出数字化过程可能产生的最少错误数量,并恢复原始文本。假设:

  1. 原始文本仅包含词典中的单词;
  2. 使用的是拉丁摩尔斯电码;
  3. 除了上述描述的错误外,没有其他错误。

输入格式

输入第一行包含两个整数:$M$ 表示词典中的单词数量,$N$ 表示信号中的滴答数($1 \le M, N \le 5\,000$)。

接下来的 $M$ 行,每行包含一个词典中的单词。每个单词均非空,且仅包含大写拉丁字母。所有这些单词的长度之和不超过 $5\,000$。

其余行包含数字化信号,即一个总长度为 $N$ 的由 +- 字符组成的序列。该序列可以被任意分割成多个非空行。信号中至少包含一个 +

文本格式的拉丁摩尔斯电码可在本题面附近下载。

输出格式

如果输入数据中提供的信号在给定条件下无法产生,则输出单个数字 -1

否则,在第一行输出一个整数 $K \ge 0$,表示可能的最少错误数量;在第二行输出能够产生该信号且错误数量为 $K$ 的原始文本。文本中的单词之间必须恰好用一个空格分隔。

如果有多种能够以最少错误数量产生该信号的原始文本方案,请输出其中字典序最小的一种。假设空格的字典序小于任何字母。

样例

输入 1

2 109
HELLO
WORLD
+-+-+-+---+---+-+++-+-+---
+-+++-+-+---+++-+++-+++-----
+-+++-+++---+++-+++-+++---
+-+++-+---+-+++-+-+---+++-+-+

输出 1

0
HELLO WORLD

输入 2

3 115
WORLD
PROGRAM
HELLO
+-+-+-+---++--+-++++-+-+---
+-++-+-++----+++-+++-+++------
+-+++-+++---+++-+++-++---
+-++++-+---++-+++-+-+---+++-+--++

输出 2

12
HELLO WORLD

输入 3

1 13
E
+-----------+

输出 3

-1

输入 4

1 13
HELLO
+--+--+--+--+

输出 4

-1

说明

第一个样例与题目描述中的例子完全相同,没有任何错误。在第二个样例中,文本相同,但有 12 个元素被缩短或延长了 1 个滴答。

在第三个样例中,存在一个 11 个滴答的停顿,这是不可能产生的。最长的元素是单词之间的 5 滴答停顿,由于错误,它最多只能变成 6 个滴答长。

在第四个样例中,有五个点,它们可以以各种组合组成字母 E、I、S 和 H,然而词典中只有唯一一个单词 HELLO,无法仅用这些字母拼出。

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.