QOJ.ac

QOJ

시간 제한: 1.0 s 메모리 제한: 64 MB 총점: 100 해킹 가능 ✓

#16776. Magica日记的钥匙

통계

他聪明、富有——而且他需要你的帮助。史高治·麦克达克(Scrooge McDuck)的第一枚硬币被玛奇卡·德·斯派尔(Magica De Spell)偷走了。苏格兰场最优秀的侦探们正在调查此案,但他们发现的唯一线索是玛奇卡不小心掉落的秘密日记。不幸的是,它被某种魔咒保护着,阻止任何人理解其内容。这就是为什么他们需要你——鸭堡(Duckburg)最优秀的数学家。

你注意到的第一件事是,某些单词出现的频率比其他单词高得多,并形成了一些奇怪的模式。你提出了一个假设,即这些单词是玛奇卡魔咒的一部分,并决定在后续分析中忽略它们。在此之后,事情变得非常明显:日记中的某些单词经常相邻出现(例如 “Scrooge” 和 “McDuck”),而其他单词的分布则几乎相互独立。你相信这就是解开玛奇卡日记的钥匙,并希望验证你的想法。

更确切地说,一个单词(word)是指由英文字母组成的非空连续序列。文本中可能包含其他字符,你应该将它们视为空格。单词是不区分大小写的。

定义 $P(a)$ 为单词 $a$ 在文本中的占比(即 $a$ 的出现次数除以文本中的单词总数)。

类似地,定义 $P(a, b)$ 为单词 $a$ 和 $b$ 相邻出现的比例(即它们相邻出现的次数除以文本中相邻单词对的总数)。

那么:

$$C(a, b) = \frac{P(a, b)}{P(a)P(b)}$$

将展示单词 $a$ 和 $b$ 之间的关联程度。

你对某些单词对特别感兴趣,并想检查它们的关联程度。不幸的是,日记太长了,无法手动进行这种分析,因此你决定编写一个程序来帮你完成。

输入格式

输入的第一行包含一个整数 $N$,表示玛奇卡日记的总行数($1 \le N \le 4000$)。

接下来是 $N$ 行文本。日记中仅包含英文字母、括号、标点符号(0123456789.,:;-!?'()")、和号(&)以及空格。文本的总长度不超过 $500\text{ KiB}$,且每个单词的长度不超过 $20$。文本中还包含至少两个非魔法单词。

第 $N + 2$ 行包含一个整数 $K$,表示需要忽略的“魔法”单词总数($0 \le K \le 100$)。

接下来的 $K$ 行每行包含一个这样的单词,均为小写。

第 $N + K + 3$ 行包含一个整数 $Q$,表示你感兴趣的单词对总数($0 \le Q \le 50\,000$)。

接下来 $Q$ 行,每行包含两个小写单词。

输出格式

对于每个查询 $(a, b)$,你应该在单独的一行中输出 $C(a, b)$ 的值,作为一个浮点数,其绝对误差或相对误差不超过 $10^{-6}$。

样例

输入样例 1

3
I have lived through
some terrible things in my life,
some of which actually happened.
3
of
in
which
3
some actually
things life
lived through

输出样例 1

6.545454545454546
0.0
13.090909090909092

输入样例 2

1
(2 - 2) Plus (1 - 1) equals 0
0
1
equals plus

输出样例 2

4.0

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.