P9149 串串题
Question 问题 P9149 串串题
Describe 题目描述
给定长度分别为 \(n,m\) 的整数序列 \(A,B\) 和常数 \(W,d\),序列从 \(1\) 开始标号,保证 \(A_i,B_i \in [1,W]\)。
定义权值为我们删去 \(A\) 中出现的对应的 \(d\) 种整数,令此时序列 \(B\) 在序列 \(A\) 中的出现次数。
你需要求所有的选择方案的权值和,对 \({10}^9+7\) 取模。
请注意:我们并不会删除序列 \(\bm{B}\) 中出现的对应整数。
Analysis 分析
观察题目我们会发现在 B 序列中出现的数比较特殊,若我们在 A 中删去的整数未在 B 序列中出现过,那他对我们目前匹配上的地方并不会造成任何影响。
我们这里记 A 序列中在 B 出现过的整数为重要的数,相反则为不重要的数。
所以我们可以把重要的数单独提取出来,记为 C 序列。
我们需要在 C 序列中匹配 B 序列,可以考虑使用 KMP 算法。令 [l,r] 为一段合法区间。
接下来只需要在 C 序列中枚举 B 序列出现的地方,同时我们对应到原序列 A 中。那么,[l,r] 里出现的不重要的数肯定要被删掉,相反地,这段区间内重要的数是一定不能被删除的。
设 a 是 [l,r] 内不重要的数,b 是 B 序列中数的种类,则此次方案(这段区间)的权值或者说对答案的贡献为 \(C\tbinom{w-a-b}{d-a}\)。
之后只需要统计这些合法区间中不重要的数,然后计算相应的贡献。
记住取模。
Code 代码
请自行训练写代码能力,若十分需要,可以咨询本人。