#P13445. [GCJ 2009 #3] Alphabetomials

    ID: 13255 远端评测题 3000~6000ms 1024MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>动态规划 DP2009Google Code Jam

[GCJ 2009 #3] Alphabetomials

Description

众所周知,44 次多项式与 55 次多项式之间有着很大的区别。关于一般 55 次多项式根不存在求根公式的问题,催生了著名的Galois 理论,不过据作者所知,这与我们这里的问题并无关系。

我们只考虑至多 44 次的多元多项式,变量为 2626 个小写英文字母。例如,下面是一个这样的多项式:

aber+aab+c\text{aber} + \text{aab} + \text{c}

给定一个字符串 SS,我们可以用它来计算该多项式的值 p(S)p(S),具体方法如下:将每个变量替换为该字母在 SS 中出现的次数。例如,对于上述多项式,若 S="abracadabra edgar"S = \text{"abracadabra edgar"},则其中有 66 个 a,22 个 b,11 个 c,11 个 e,33 个 r。因此,

$$p(S) = 6 \times 2 \times 1 \times 3 + 6 \times 6 \times 2 + 1 = 109。$$

给定一个只包含小写字母且各不相同的单词字典,我们称一个字符串 SSdd-短语(dd-phrase),如果

S="S1 S2 S3  Sd"S = "S_1\ S_2\ S_3\ \ldots\ S_d"

其中 SiS_i 是字典中的任意单词,1id1 \leqslant i \leqslant d。也就是说,SS 是由 dd 个字典单词用空格隔开拼成的。给定一个 K10K \leqslant 10,请你对每个 1dK1 \leqslant d \leqslant K,计算所有 dd-短语的 p(S)p(S) 之和。由于答案可能很大,请输出对 1000910009 取余后的结果。

Input Format

第一行包含测试用例数量 TT。接下来是 TT 组测试数据。每组测试数据格式如下:

第一行包含一个多元多项式表达式 pp(格式见下文说明),后接一个空格和整数 KK

第二行是整数 nn,表示字典中单词的数量。

接下来 nn 行,每行一个只含小写字母的单词。每个测试用例中不会有重复单词。

多项式总是写成若干项的和,每项是若干变量的乘积。ata^t 就写作 tt 个 a 连在一起。例如 a2ba^2b 写作 aabaab。每一项中的变量都按字典序非递减排列。

Output Format

对于每个测试用例,输出一行,格式如下:

Case #XX: sum1 sum2  sumksum_1\ sum_2\ \ldots\ sum_k

其中 XX 是测试编号(从 11 开始),sumisum_i 表示所有 ii-短语的 p(S)p(S) 之和,对 1000910009 取余。

2
ehw+hwww 5
6
where
when
what
whether
who
whose
a+e+i+o+u 3
4
apple
orange
watermelon
banana
Case #1: 15 1032 7522 6864 253
Case #2: 12 96 576

Hint

限制条件

  • 1T1001 \leqslant T \leqslant 100
  • 字符串 pp 由一个或多个项用加号连接,不以加号开头或结尾。每个 pp 最多有 55 项。每项至少 11 个、至多 44 个小写字母,且字母按非递减字典序排列。同一多项式内不会有重复项。
  • 每个单词非空,仅含小写英文字母,长度不超过 5050。同一测试用例中不会有重复单词。

小数据集

  • 时间限制:3 秒
  • 1n201 \leqslant n \leqslant 20
  • 1K51 \leqslant K \leqslant 5

大数据集

  • 时间限制:6 秒
  • 1n1001 \leqslant n \leqslant 100
  • 1K101 \leqslant K \leqslant 10

翻译由 ChatGPT-4.1 完成。