QOJ.ac

QOJ

시간 제한: 3 s 메모리 제한: 1024 MB 총점: 100

#14758. 网页浏览器

통계

Bajtosia 正在为信息学课准备一份演示文稿。为此,她需要访问 $n$ 个网址两两不同的网页,以获取所需的信息。

Bajtosia 使用的网页浏览器有一个输入框,初始为空字符串。通过按键可以修改输入框中的内容,并访问与当前输入框中字符串相对应的网址。可用的操作如下:

  1. 字母键 az:在当前字符串的末尾追加按下的字母。
  2. BACKSPACE 键:删除当前字符串的最后一个字母(如果输入框为空,则什么也不做)。
  3. ENTER 键:访问与当前字符串相对应的网页,然后清空输入框(即将其变为空字符串)。
  4. TAB 键:将当前字符串自动补全为最近访问过的、且以当前字符串为前缀(即开头部分)的网页网址(如果没有这样的已访问网页,则什么也不做)。

距离提交演示文稿的时间已经不多了,因此 Bajtosia 希望通过最少的按键次数访问所有需要的网页。Bajtosia 不能访问除需要访问的网页之外的任何其他网页。Bajtosia 可以按任意顺序访问这些需要的网页,且每个网页必须恰好访问一次。请帮助 Bajtosia 计算最少的按键次数,并确定需要按下的按键序列。

输入格式

第一行包含一个整数 $n$($1 \le n \le 10^6$),表示 Bajtosia 需要访问的网页数量。

接下来的 $n$ 行中,第 $i$ 行(对于 $1 \le i \le n$)包含一个非空字符串 $s_i$,由小写英文字母(a-z)组成,表示第 $i$ 个网页的网址。字符串 $s_i$ 两两不同。

设 $S = |s_1| + \dots + |s_n|$,保证 $S \le 10^6$。

输出格式

第一行输出一个整数 $k$,表示访问所有给定网页所需的最少按键次数。

第二行输出一个长度为 $k$ 的字符串,表示依次按下的按键序列。其中 BACKSPACEENTERTAB 键应分别用字母 BET 表示。如果存在多种可行方案,输出其中任意一种即可。

样例

输入样例 1

3
aaaaba
aaaaczzz
aaaadb

输出样例 1

21
aaaabaETBBdbETBBczzzE

说明

样例解释:

Bajtosia 起初在输入框中逐字输入字符串 aaaaba,然后按下 ENTER。接着她按下 TAB 键,此时输入框中再次出现字符串 aaaaba。随后 Bajtosia 按下两次 BACKSPACE,得到 aaaa,并输入两个字母,得到 aaaadb,然后按下 ENTER。接着,她按下 TAB 键并按下两次 BACKSPACE,再次得到 aaaa。最后,Bajtosia 输入四个字母得到 aaaaczzz,并最后一次按下 ENTER

整个过程也在下方的“样例解释图解”中进行了展示。

样例测试点:

除了上述样例(测试点 0a)外,还有以下样例测试点:

  • 0b:$n = 26$ 个字符串,每个字符串长度为 $20\,000$。每个字符串的前 $19\,999$ 个字符均为字母 a,最后一个字符依次为英文字母表中的字母(a, b, ..., z)。
  • 0c:$n = 10$ 个字符串,其中第 $i$ 个字符串(对于 $i = 1, \dots, 10$)由字母 a 重复 $18i$ 次组成。
  • 0d:$n = 65534$ 个字符串。输入中包含所有长度不超过 $15$ 且仅由字母 ab 组成的非空字符串。
  • 0e:$n = 2$ 个字符串。两个字符串的长度均为 $500\,000$,且前 $300\,000$ 个位置的字母相同。第 $300\,001$ 个位置的字符不同。后续字符是随机的。

提示:

在本题中,你只有在比赛结束后才能得知提交的评测得分。

子任务

测试点被分为以下子任务。每个子任务的测试由一个或多个独立的测试点组组成。

子任务 限制 分值
1 $n \le 8$ 且对于所有 $i \in [1..n]$ 有 $ s_i \le 10$ 17
2 所有 $s_i$ 长度相同 12
3 $S \le 1000$ 32
4 $s_i$ 仅由字母 ab 组成 18
5 无附加限制 21

如果你的程序只有第一行(最少按键次数)正确,你将获得该测试点 80% 的分数。你不需要输出第二行即可获得这些分数。

样例解释图解

下图展示了上述样例测试点解决过程的各个步骤。

样例解决步骤示意图

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.