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 代码

请自行训练写代码能力,若十分需要,可以咨询本人。
posted @ 2023-05-27 14:48  Mr_Azz  阅读(19)  评论(0编辑  收藏  举报