CF1838E
CF1838E
题目描述:
给定一个数组 \(a\) 的 \(n\) 个整数,其中所有元素 \(ai\) 位于范围 \([1,k]\) 内。有多少不同的数组 \(b\) 的 \(m\) 个整数,其中所有元素 \(b_i\) 位于范围 \([1,k]\) 内,包含 \(a\) 作为子序列?如果两个数组在至少 \(1\) 个位置上不同,则认为它们是不同的。
如果 \(x\) 可以通过删除若干(可能为零或全部)元素从 \(y\) 得到,那么序列 \(x\) 是序列 \(y\) 的一个子序列。
由于答案可能很大,请对其取模 \(10^9+7\) 后输出。
\(n\le 2\times 10^5\ \ \ m\le 10^9\)
关键矛盾:
首先 \(a\) 数组的值肯定是完全没用的。
所以一种思路是:
选定一些位置放 \(a\) 数组的值,其他放 \(b\) 。
但题目问的是存在这个子序列,所以直接数肯定会重。
这时候应当思考如何判定存在一个子序列。
思路当是从左往右扫如果相同就匹配,否则跳过。
那再思考如何计数:
我们还是选定一些位置,然后我们希望计数这样一种 \(b\) 数组,使得 \(b\) 的判定流程中这些位置是匹配上的位置。
显然这些位置上放 \(a\) 数组的值。
其他地方的值不能和后面一个选定的位置的值相同,不然就会提前匹配到这个位置。
如果后面没有选定位置了,就可以随便选。
根据这个,可以写出一个计数式子:
可惜,\(m\le 10^9\) ,所以过不了。
更严重的问题是,此式需要用到高等数学的只是才能优化,至此思路卡死。
正难则反
考虑如何计数不合法的序列。
不合法的序列即没有匹配到 \(n\) 个的序列。
枚举它匹配到了多少个,那么:
含义是在 \(m\) 个位置中选择 \(i\) 个,由于后面一定有还没有匹配的位置,所以所有剩余 \(m-i\) 个位置就都只能选 \(k-1\) 个。
至此此题结束。

浙公网安备 33010602011771号