#P15182. [hacker2025R3]Adversarial Attack

[hacker2025R3]Adversarial Attack

题目描述

Tasky 的快速进步引来了恶意攻击者,他们试图测试 Tasky 的极限。研究人员发现了一类基于 NN 个攻击单词 W1,W2,,WNW_1,W_2,\ldots,W_N 的“对抗提示”。每个 WiW_i 都由小写英文字母 az 组成。如果 Tasky 的输入中按顺序包含这些单词,它就会崩溃。

这些单词并不一定需要互不重叠地出现在输入中。只要存在一个字符串 SS,使得所有 NN 个攻击单词都能作为子串按顺序出现在 SS 中,并且 SS 中的每个字符都至少被某个攻击单词的出现区间覆盖,那么 SS 就是一个有效的攻击超串。

形式化地,长度为 LL 的字符串 S1..LS_{1..L} 有效,当且仅当存在 NN 个区间 [Li,Ri][L_i,R_i],满足:

  1. 对每个 i=1..Ni=1..N,攻击单词 WiW_i 出现在区间 [Li,Ri][L_i,R_i] 上,即SLi..Ri=Wi.S_{L_i..R_i}=W_i.
  2. 对所有 i<ji<j,都有LiLjRiRj,L_i\le L_j\quad\text{且}\quad R_i\le R_j, 也就是说,这些攻击单词必须按 W1,W2,,WNW_1,W_2,\ldots,W_N 的顺序出现。
  3. SS 中每个位置都必须至少属于一个区间,即不允许出现任何没有被攻击单词覆盖的多余字符。

对于每个 L=1..KL=1..K,你需要判断是否存在长度为 LL 的有效攻击超串。请输出所有可行长度 LL 的总和。

注意,输入中的单词以压缩形式给出。第 ii 个单词 WiW_i 的压缩形式记为 CiC_i

压缩格式

压缩串只包含字母和数字。若出现一段数字,它表示后面紧跟的那个字符重复出现的次数。

例如:

  • c3po 解压后为 cpppo
  • 11ab 解压后为 aaaaaaaaaaab

输入格式

输入第一行包含一个整数 TT,表示测试用例数。

对于每个测试用例:

第一行包含两个整数 N,KN,K

接下来 NN 行,第 ii 行包含压缩后的攻击单词 CiC_i

输出格式

对于第 ii 个测试用例,输出:

Case #i: ans

其中 ansans 为所有存在有效攻击超串的长度之和。

数据范围

  • 1T901\le T\le 90
  • 1N20001\le N\le 2000
  • 1K1061\le K\le 10^6
  • 1Ci20001\le |C_i|\le 2000,即每个压缩单词长度不超过 20002000
  • 1Wi1061\le |W_i|\le 10^6,即每个解压后的单词长度不超过 10610^6
  • 至多 44 个测试用例中存在解压长度大于 10410^4 的单词
  • 解压后字符串总长度没有显式上界

样例输入

6
3 9
sand
andy
meta
2 9
banana
anana
1 5
apple
2 10
1a2a3a
aab
2 8
bora
bora
2 10
tournament
tour

样例输出

Case #1: 9
Case #2: 14
Case #3: 5
Case #4: 24
Case #5: 12
Case #6: 0

样例解释

第一个样例中,长度 1188 都不存在有效攻击超串,但长度 99sandymeta 是有效的:其中 sand 位于 141\ldots 4andy 位于 252\ldots 5meta 位于 696\ldots 9。因此答案为 99

第二个样例中,banana(长度 66)和 bananana(长度 88)是两个有效攻击超串,因此答案为 6+8=146+8=14

第四个样例中,两个解压后的单词分别为 aaaaaaaab。有效攻击超串为 aaaaaab(长度 77)、aaaaaaab(长度 88)和 aaaaaaaab(长度 99)。注意,例如 aaaaaacaab 不合法,因为其中字符 c 没有被任何攻击单词的区间覆盖。因此答案为 7+8+9=247+8+9=24