#P1403. Hotline

Hotline

题目描述

每个客户有时都需要帮助处理新的和不寻常的产品。因此,热线服务对每家公司都非常重要。我们需要一个单一的电话号码,客户可以随时找到一个友好的声音,准备帮助解决任何问题。另一方面,需要很多人来担任热线接线员,而人力资源总是非常昂贵。此外,在凌晨4点假装“友好的声音”并向一个醉酒的人解释你真的无法给他议会的电话号码并不容易。还发现有些问题重复得非常频繁,反复回答这些问题非常烦人。

ACM是一家现代公司,希望解决其热线问题。他们希望通过创建一个复杂的软件系统来减少人工接线员的数量,该系统能够回答大多数常见问题。客户的语音由特殊的语音识别模块(VRM)分析并转换为纯文本。然后,文本由人工自动自适应回答算法(AAAAA)处理。最常见的问題被识别并自动回答。然后,回复通过文本到语音模块(TTS)转换为声音。

你需要编写AAAAA模块。因为你的算法应该是自适应的,所以它没有明确的知识库。但它必须能够听英语句子并记住提到的事实。每当问到关于这样事实的问题时,系统必须正确回答。VRM和TTS模块已经实现,因此AAAAA的输入和输出将以文本形式呈现。

输入

输入的第一行是一个正整数TT,表示后续的对话数量。每个对话由零行或多行组成,每行包含一个句子:要么是陈述句,要么是疑问句。陈述句以句点(.)结尾,疑问句以问号(?)结尾。没有陈述句会出现多次,但疑问句可以重复。每个对话后有一行额外的行,以感叹号(!)结尾。

句子可以包含单词、空格和标点符号(如逗号、冒号、分号等)。所有单词仅包含英文字母,并且区分大小写。这意味着同一个单词总是以相同的方式书写,通常是小写。首字母缩略词、名称和其他一些单词可以以大写字母开头。为简单起见,所有句子以小写字母开头。只有当第一个单词应该大写时,句子才以大写字母开头。单词之间没有多余的空格。每行不超过100个字符。每个测试用例最多有100个陈述句。

陈述句

每个陈述句有以下两种形式之一(~表示一个空格):

  1. 主语 ~ 谓语[s] [ ~ 宾语] .
  2. 主语 ~ don't|doesn't ~ 谓语 [ ~ 宾语] .

方括号标记可选部分,竖线表示两种可能的变体。主语是单个单词,名词或单数代词。谓语是表示某种活动的动词(单个单词)。宾语可以是任何文本。宾语不包含任何句点。任何“动词 + 宾语”对确定唯一的活动。相同的动词与不同的宾语构成不同的独立活动,即句子的不同和独立含义。没有宾语的句子可以视为宾语为空的句子。没有宾语的动词与任何非空宾语的动词具有不同和独立的含义。

第一种形式的句子表示肯定陈述。单词“谓语[s]”表示与句子主语匹配的动词。如果主语是“I”或“you”,动词的形式与不定式相同。对于任何其他主语,动词末尾添加字母“s”。假设没有不规则动词。

第二种形式是否定陈述。动词“don't”或“doesn't”也必须与主语匹配。“don't”用于“I”或“you”,“doesn't”用于任何其他情况。

可以使用特殊通用主语“everybody”。它表示该活动适用于任何主语。另一个特殊主语是“nobody”。这样的句子也适用于任何主语,但其含义是否定的。这两种通用主语只能用于第一种形式(不带“doesn't”)。句子“nobody likes something”完全等同于“everybody doesn't like something”,但后一种形式不会出现在输入中。

疑问句

每个疑问句有以下三种形式之一:

  1. do|does ~ 主语 ~ 谓语 [ ~ 宾语] ?
  2. who ~ 谓语s [ ~ 宾语] ?
  3. what ~ do|does ~ 主语 do ?

单词“do|does”始终与主语匹配(“do I?”, “do you?”, “does any other subject?”)。在第二种类型的疑问句中,谓语始终与单词“who”匹配,即始终添加“s”。通用主语不能在疑问句中使用。

输出

对于每个对话,你的程序必须输出一行Dialogue #D:,其中DD是对话的序号,从1开始。然后为每个疑问句打印三行:第一行重复疑问句,第二行包含答案,第三行为空行。对于陈述句不打印任何内容。在每个对话后,打印输入中相同的以感叹号结尾的行。然后打印一个额外的空行。空行仅包含换行符。

答案必须正确格式化以被TTS模块接受。只有出现在答案之前的输入中的陈述句用于相应的回复。如果陈述句之间存在任何矛盾,回复始终是I am abroad.。如果疑问句和陈述句考虑特殊主语“you”,在答案中必须替换为“I”。如果疑问句考虑特殊主语“I”,在答案中必须替换为“you”。动词必须始终与句子的主语匹配。正确答案的确切形式取决于疑问句的类型。

  1. does subject predicate [object] ?

如果存在关于提到的主语(或通用主语“everybody”)、谓语和宾语的任何肯定陈述,答案为:

yes, ~ 主语 ~ 谓语[s] [ ~ 宾语] .

如果存在关于提到的主语(或通用主语“nobody”)、谓语和宾语的任何否定陈述,答案为:

no, ~ 主语 ~ don't|doesn't ~ 谓语 [ ~ 宾语] .

否则,答案为:maybe.

答案中的主语始终与疑问句的主语相同。

  1. who predicates [object] ?

如果存在关于任何主语、指定谓语和宾语的肯定陈述,答案为:

主语 ~ 谓语[s] [ ~ 宾语] .

如果有两个或更多主语匹配该活动,将答案中的主语替换为所有这些主语的枚举,顺序与输入中相应陈述句的出现顺序相同。主语之间用逗号和空格分隔,最后两个主语用单词“and”分隔。如果“everybody”属于枚举的主语组,不枚举主语,仅打印“everybody”。如果枚举包含至少两个主语,谓语匹配复数主语(即动词不带尾随“s”),否则匹配唯一主语。

主语1 , ~ 主语2 ~ and ~ 主语3 谓语 [ ~ 宾语] .

如果存在关于通用主语“nobody”、指定谓语和宾语的否定陈述,答案为:

nobody ~ 谓语s [ ~ 宾语] .

否则,答案为:I don't know.

  1. what does subject do ?

如果存在关于指定主语(或通用主语“everybody”或“nobody”)的一个或多个句子(包括肯定和否定),必须按输入中相应句子的出现顺序将所有动词和宾语包含在回复中。不能多次包含相同的动词-宾语对(必须跳过第二次出现)。动词-宾语对之间用逗号和空格分隔,最后一个动词用逗号和单词“and”分隔。请注意,这里打印了逗号,尽管在前一种答案类型中分隔主语时没有逗号(见上文)。否定答案的形式与陈述句相同,即使用动词“don't”或“doesn't”:

主语 [ ~ don't|doesn't] ~ 谓语1[s] [ ~ 宾语1] , [ ~ don't|doesn't] ~ 谓语2[s] [ ~ 宾语2] , ~ and [ ~ don't|doesn't] ~ 谓语3[s] [ ~ 宾语3] .

主语 [ ~ don't|doesn't] ~ 谓语1[s] [ ~ 宾语1] , ~ and [ ~ don't|doesn't] ~ 谓语2[s] [ ~ 宾语2] .

主语 [ ~ don't|doesn't] ~ 谓语[s] [ ~ 宾语] .

否则,答案为:I don't know.

输入样例 1

1
I like hotdogs.
nobody likes to work.
everybody smiles.
what do I do?
who smiles?
what do you do?
does Joe smile?
do I like to work?
everybody hurts sometimes.
who walks there?
Michal walks there.
who walks there?
what does Michal do?
do you understand?
nobody walks there.
do you understand now?
bye!

输出样例 1

Dialogue #1:
what do I do?
you like hotdogs, don't like to work, and smile.

who smiles?
everybody smiles.

what do you do?
I don't like to work, and smile.

does Joe smile?
yes, Joe smiles.

do I like to work?
no, you don't like to work.

who walks there?
I don't know.

who walks there?
Michal walks there.

what does Michal do?
Michal doesn't like to work, smiles, hurts sometimes, and walks there.

do you understand?
maybe.

do you understand now?
I am abroad.

bye!

来源

Central Europe 2000