#P1109. Index Generation

Index Generation

本题没有可用的提交语言。

描述

大多数非虚构类书籍和参考书籍都有一个索引,以帮助读者在文本中查找特定术语或概念的相关内容。以下是一个索引示例: larch, 4, 237, 238, 414

  • Monty Python and, 64, 65, 66
  • planting of, 17 Lenny Kravitz, 50
  • going his way, 53 lumbago, 107 mango
  • Chris Kattan, 380
  • storage of, 87, 90
  • use in Nethack, 500, 501
  • Vitamin C content, 192

每个索引条目都包含一个主条目,后面跟着零个或多个次条目,次条目以“+”开头。条目后面通常会跟着一个页码引用列表,但如果至少有一个次条目存在(就像上面的“mango”条目那样),主条目后面可能就没有页码引用列表。主条目是经过排序的,并且跟在主条目后面的次条目也同样是经过排序的。排序不区分大小写。一个条目的页码引用是按升序排列的,并且不包含重复项(如果同一页上有两个或更多相同的条目,就可能会出现重复项)。

你的任务是读取一个嵌入了索引信息的文档,并生成索引。文档由一行或多行 ASCII 文本组成。页码从11开始,字符“&”表示新页面的开始(这会使当前页码加11)。索引条目由一个标记指示,其最复杂的形式具有以下语法: {text%primary$secondary}

这里的“text”是要编入索引的文本,“primary”是一个可选的主条目,“secondary”是一个次条目。“%primary”和“$secondary”都是可选的,但如果两者都存在,它们必须按给定的顺序出现。如果“primary”存在,那么它将被用作主条目;如果不存在,那么“text”将被用作主条目。如果“secondary”存在,那么该标记会为该次条目添加一个页码引用;否则,它会为主条目添加一个页码引用。单个标记不能同时为主条目和次条目添加页码引用。以下是四种可能的标记类型的示例,它们与上面示例索引中的四个条目相对应: ... his {lumbago} was acting up, so... ... {Lenny%Lenny Kravitz} lit up the crowd with his version of... ... Monty Python often used the {larch$Monty Python and} in... ... when storing {mangos%mango$storage of}, be sure to...

输入

输入由一个或多个文档组成,后面跟着一行仅包含“**”的内容,这表示输入的结束。文档隐式地从11开始编号。每个文档由一行或多行文本组成,后面跟着一行仅包含“*”的内容。每一行文本的长度(不包括行尾字符)最多为7979个字符。对于第ii个文档,输出“DOCUMENT ii”这一行,然后按照示例中确切的输出格式输出已排序的索引。

输出

注意:

  • 一个文档最多将包含100100个标记,最多有2020个主条目。
  • 一个主条目最多将有55个次条目。
  • 一个条目最多将有1010个唯一的页码引用(不包括重复项)。
  • 字符“&”不会出现在任何标记内部,并且在一个文档中最多出现500500次。
  • 字符“*”仅用于表示文档的结束或输入的结束。
  • 字符“{”、“}”、“%”和“$”仅用于定义标记,不会出现在任何文本或条目中。
  • 一个标记可能跨越多行。标记内的每个换行符都必须转换为单个空格。
  • 标记内的一个空格(包括转换后的换行符)通常会像其他任何字符一样包含在文本/条目中。但是,任何紧跟在“{”后面、紧接在“}”前面,或者与“%”或“$”紧邻的空格都必须被忽略。
  • 一个标记的总长度(从开头的“{”到结尾的“}”测量,并且其中所有嵌入的换行符都已转换为空格)最多为7979个字符。

输入示例

Call me Ishmael.
*
One {fish $unary}, two {fish$ binary},&red {fish $ scarlet}, blue {fish$
azure}. & By { Dr. Seuss }.
*
This is a {simple } & & { document} that &{
simply %simple
$adverb
} & {illustrates %vision} &&&&& one {simple-minded% simple} {Judge}'s {vision} 
for what a {document } might { look % vision} like.
*
**

输出示例

DOCUMENT 1
DOCUMENT 2
Dr. Seuss, 3
fish
+ azure, 2
+ binary, 1
+ scarlet, 2
+ unary, 1
DOCUMENT 3
document, 3, 10
Judge, 10
simple, 1, 10
+ adverb, 4
vision, 5, 10

来源

2001 年美国中中部地区竞赛