#P16590. [GKS 2016 #D] Codejamon Cipher
[GKS 2016 #D] Codejamon Cipher
题目描述
CodejamOn 怪物使用加密的消息进行交流。其工作原理如下:
每种怪物都有自己独特的词汇表:一个包含 个不同单词的列表,单词仅由小写英文字母组成。当怪物说话时,它首先使用词汇表中的单词组成一个句子;同一个单词可以在句子中出现多次。然后,它将句子转换为加密字符串,方法如下:
- 将句子中的每个单词随机打乱。
- 删除所有空格。
理解怪物能为你带来巨大优势,因此你正在构建一个工具来完成这项任务。作为第一步,你需要能够根据一个加密字符串,确定有多少种可能的原始句子能够生成该加密字符串。例如,如果怪物的词汇表是 ["this", "is", "a", "monster", "retsnom"],并且它说出了加密字符串 "ishtsiarestmon",则有四种可能的原始句子:
- "is this a monster"
- "is this a retsnom"
- "this is a monster"
- "this is a retsnom"
你拥有来自同一怪物的 个加密字符串。对于每个字符串,你能计算出可能的原始句子的数量吗?
重要:由于输出可能非常大,我们只要求你输出结果除以素数 ()的余数。
输入格式
输入的第一行给出测试用例的数量 ;接下来有 个测试用例。每个测试用例的第一行包含两个整数 和 ,分别表示怪物的词汇表大小和加密字符串的数量。随后 行,每行包含一个由小写英文字母组成的字符串,表示怪物词汇表中的一个单词。最后 行,每行包含一个仅由小写英文字母组成的字符串,表示一个加密句子。保证所有加密句子都是有效的,即每个句子至少有一个可能的原始句子。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 开始), 是一个空格分隔的列表,包含 个整数:按照输入顺序,每个加密句子对应的答案(模 )。
2
5 1
this
is
a
good
day
sithsiaodogyad
5 3
pt
ybsb
xnydt
qtpb
kw
xnydttbpqtpqb
yxdtntpbsby
ptptxytdnsbybpt
Case #1: 2
Case #2: 1 1 1
提示
限制条件
。
。
小数据集(测试集 1 – 可见)
。
。
。
大数据集(测试集 2 – 隐藏)
。
。
。
翻译由 DeepSeek V4 Pro 完成