CF777D Cloud of Hashtags
题目描述
Vasya 是“Mouse and keyboard”组织公共主页的管理员,他的日常工作是发布与竞技编程相关的新闻。对于每条新闻,他还会创建一个标签列表,以方便按主题查询。对于本题,标签被定义为以一个符号“\#”开头、其余部分由小写英文字母组成的字符串。标签的长度被定义为去掉“\#”后剩余字符的数量。
主页的主管理员告诉 Vasya,标签必须按字典序排列(字典序的定义见提示部分)。
Vasya 很懒,他并不想真的去改变早已发布的标签顺序。相反,他决定对某些标签删除后缀(即字符串末尾连续的一段字符)。他可以删除任意数量的字符,甚至可以将整个字符串都删掉,只保留一个“\#”。Vasya 想要选择一种删除方式,使得被删除的总字符数最小。如果有多种最优方案,他接受任意一种。
输入格式
输入的第一行包含一个整数 $n$($1\leq n\leq 500000$),表示当前需要编辑的标签数。
接下来的 $n$ 行每行包含恰好一个标签,且每个标签长度均为正。
保证所有标签(也就是所有字符串去掉“\#”后的总长度)之和不超过 $500000$。
输出格式
输出按照某种最优方案处理后的标签,每个标签占一行。
说明/提示
长度为 $m$ 的单词 $a_1,a_2,\dots,a_m$ 被认为在字典序上不大于长度为 $k$ 的单词 $b_1,b_2,\dots,b_k$ ,当且仅当,有以下两种情况之一成立:
- 存在最小的下标 $i$ 满足 $a_i\ne b_i$,且 $a_i$ 按字母表顺序早于 $b_i$,即第一个不同的字符处 $a$ 的字母早于 $b$;
- 如果没有这样的下标 $i$ 且 $m\leq k$,即第一个单词是第二个单词的前缀或两个单词完全相同。
如果序列中的每一个单词(除最后一个外)在字典序上都不大于下一个单词,则称这个序列按字典序有序。
对于由小写英文字母组成的单词来说,字典序和词典中的单词顺序相同。
根据上述定义,只包含一个“\#”的标签,在字典序上不超过任何其它合法标签。因此,在第三个样例中,不能只对后三个标签做缩短,而保持前两个标签不变。
由 ChatGPT 5 翻译