P6942 [ICPC 2018 WF] Comma Sprinkler

题目描述

正如实践会告诉你的那样,英语中逗号的使用规则复杂、令人沮丧且常常模棱两可。许多人,甚至是英语母语者,在实践中会忽略它们,并应用自定义规则,或者根本不使用规则。 逗号洒水器博士通过制定一套规则解决了这个问题,这些规则在句子中洒上逗号,既不含糊也不简单。在这个问题中,你将帮助洒水器博士编写一个算法来自动应用她的规则。 洒水器博士为现有文本添加逗号的规则如下: 1. 如果文本中的某个单词前面有逗号,则找到该单词在文本中的所有出现位置,并在每个出现位置前加上逗号,除非该出现位置是句子的第一个单词或已经有逗号在前。 2. 如果文本中的某个单词后面有逗号,则找到该单词在文本中的所有出现位置,并在每个出现位置后加上逗号,除非该出现位置是句子的最后一个单词或已经有逗号在后。 3. 重复应用规则 $1$ 和规则 $2$,直到无法再使用它们添加新的逗号为止。 例如,考虑以下文本: ``` please sit spot. sit spot, sit. spot here now here. ``` 因为在第二个句子中,spot 后面有逗号,所以在第三个句子中的 spot 后面也应加上逗号(但不是第一个句子,因为它是该句子的最后一个单词)。此外,因为在第二个句子中,sit 前面有逗号,所以在第一个句子中的该单词前也应加上逗号(但不在第二个句子开头的 sit 前加逗号,因为它是该句子的第一个单词)。最后,注意到一旦在第三个句子中的 spot 后加上逗号,here 的第一个出现位置前就有逗号。因此,也在 here 的其他出现位置前加上逗号。没有更多逗号可以添加,所以最终结果是: ``` please, sit spot. sit spot, sit. spot, here now, here. ```

输入格式

输入包含一行文本,至少包含 $2$ 个字符,最多包含 $10^6$ 个字符。每个字符均为小写字母、逗号、句号或空格。我们定义一个单词为文本中最大长度的字母序列。文本遵循以下约束: * 文本以一个单词开头。 * 文本中的每两个单词之间,要么有一个空格,要么有一个逗号后跟一个空格,要么有一个句号后跟一个空格(表示一个句子的结束和新句子的开始)。 * 文本的最后一个单词后面跟一个句号,没有尾随空格。

输出格式

输出应用洒水器博士算法后的文本结果。

说明/提示

时间限制:原题 $8$ 秒,依据评测机性能改为 $6$ 秒。 内存限制:$\text{1024MB}$。 题面翻译由 ChatGPT-4o 提供。