P13222 [GCJ 2015 #1C] Typewriter Monkey
题目描述
你的出版社决定让猴子随机敲击键盘来创作伟大的文学作品。你是一个猴子的监督员,这只猴子的键盘上有 $K$ 个按键,每个按键上都标有一个大写英文字母(同一个字母可能出现在多个按键上)。猴子将从一个空字符串开始,重复 $S$ 次以下操作:从键盘上等概率随机选择一个按键并按下,将该按键上的字母添加到字符串的末尾。最终得到的字符串长度为 $S$。
你有一个长度为 $L$ 的*目标单词*,你希望猴子能够敲出来(目标单词不一定是真正的英文单词)。这个目标单词可能在猴子敲出的字符串中出现多次(重叠的情况也算,例如目标单词为 "ABA",猴子敲出 "ABABA" 时,包含两个 "ABA")。
你打算每出现一次目标单词就给猴子一根香蕉。当你去检查猴子的作品时,你会带上足够多的香蕉,以保证无论猴子敲出了什么,你都能支付得起。然后,你会根据猴子实际敲出的目标单词次数支付香蕉,剩下的香蕉归你所有。
你期望最终能留下多少根香蕉?
输入格式
输入的第一行为测试用例数 $T$。接下来有 $T$ 组测试数据。每组测试数据包含三行:
第一行包含三个用空格分隔的正整数:$K$、$L$ 和 $S$。
第二行为一个长度为 $K$ 的仅包含大写英文字母的字符串,表示猴子的键盘。
第三行为一个长度为 $L$ 的仅包含大写英文字母的字符串,表示目标单词。
输出格式
对于每组测试数据,输出一行,格式为 "Case #$x$: $y$",其中 $x$ 为测试用例编号(从 1 开始),$y$ 为你期望能留下的香蕉数。
如果 $y$ 的绝对误差或相对误差在 $10^{-6}$ 以内,则视为正确。
说明/提示
**样例解释**
注意,第 5 组样例不在 Small 数据集的范围内。
在第 1 组样例中,猴子根本无法敲出目标单词 "MONKEY"(因为键盘上缺少目标单词中的大部分字母),所以你无需带香蕉,也不会支付任何香蕉。可怜的猴子!
在第 2 组样例中,猴子一定会敲出 "AAAA",其中目标单词 "AAA" 会出现两次(重叠),你需要带两根香蕉并全部支付出去。
在第 3 组样例中,猴子可能敲出的字符串有 "AA"、"AB"、"BA"、"BB",每种概率均为 $1/4$,它们分别包含 0、1、1、2 次目标单词。你需要带两根香蕉以备 "BB" 的情况,但平均支付 $(0 + 1 + 1 + 2) / 4 = 1$ 根香蕉。
在第 4 组样例中,猴子第一步有 $1/3$ 的概率敲 "G",第二步有 $1/3$ 的概率敲 "O",所以敲出 "GO" 的概率为 $1/9$,你需要带一根香蕉,并在 $1/9$ 的情况下支付出去。
在第 5 组样例中,理论上猴子最多能敲出 9 次 "ROSENCRANTZ",但实际出现一次的概率都极小,可以忽略不计。
**数据范围**
$1 \leq T \leq 100$。
**小数据集(11 分)**
- 时间限制:~~240~~ 5 秒。
- $1 \leq K \leq 7$。
- $1 \leq L \leq S \leq 7$。
**大数据集**
- 时间限制:~~480~~ 10 秒。
- $1 \leq K \leq 100$。
- $1 \leq L \leq S \leq 100$。
由 ChatGPT 4.1 翻译