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 提供。