传送门:1989E
标签:动态规划
题目大意
考虑一个由n个整数组成的数组a,其中每个元素都在1到k之间,并且每一个从1到k的整数至少出现一次。让b数组通过以下方式构造:对于a中的第i个元素,b[i]是到与a[i]不相等的最近元素的距离。换句话说,bi=minj∈[1,n],aj≠ai∣i−j∣。例如,如果a=[1,1,2,3,3,3,3],那么b=[2,1,1,1,2,1,1]。计算所有可能的a数组中可以得到的不同b数组的数量,并对998244353取模后输出。
输入:输入只有一行,包含两个整数n和k(2≤n≤2⋅105;2≤k≤min(n,10))。
输出:输出一个整数——可以得到的不同b数组的数量,对998244353取模后输出。
算法分析
- 考虑 a a a 中的一个等元素块。如果我们把 a a a 分成这样的块,我们可以单独考虑每个块 — 对于每个元素,我们只需要距离最近边界的距离(除了第一个和最后一个块,我们只考虑一个边界)。很容易看出,如果块的长度是偶数(设为 2 x 2x 2x),则这些块内的距离为 [1, 2, 3, …, x-1, x, x, x-1, …, 3, 2, 1]。如果块的长度是奇数(设为 2 x − 1 2x-1 2x−1),则距离为 [1, 2, 3, …, x-1, x, x-1, …, 3, 2, 1]。现在我们不需要 a a a 中的实际值,我们只需要关于等元素块的信息。
- 我们需要至少有 k k k 个等元素块,因为如果块的数量小于 k k