ABC385 G

· · 题解

题目翻译

对于一个 (1,2,\dots,N) 的排列 P=(P_1,P_2,\dots,P_N),定义整数 L(P)R(P)

给定你整数 NK。找出满足 L(P)-R(P)=K(1,2,\dots,N) 的排列 P 的数量对 998244353 取模后的值。

思路

首先,高度为 N 的建筑会对 L(P)R(P) 造成贡献。在 N 左边的建筑只可能会对 L(P) 造成贡献,在 N 右边的建筑只可能会对 R(P) 造成贡献。

接下来考虑 L(P)-R(P)=K 的限制,可以枚举 L(P),那么 R(P) 也知道了。记对 L(P)R(P) 造成贡献的建筑有 d 个,那么我们就需要求出剩下 N-d 栋建筑完全没造成贡献且只考虑这些建筑的方案数。

来考虑这样一种生成这 N 栋建筑的方案,将建筑按照高度从大到小插入,那么第 i 次插入(即高度为 N-i+1 的建筑):

接下来我们就可以计算出方案了,定义 f_{i,j} 表示当前是第 i+2 次插入,其中 j 栋建筑没造成贡献且只考虑这些建筑的方案数,那么有:

f_{i,j}=f_{i-1,j}+f_{i-1,j-1}\times i

我们需要的就是 f_{n-2}

那么对于 L(P)+R(P)-1=d 的方案数就是 C_{d-1}^{R(P)-1}\times f_{n-2,N-d}

我们就可以在 O(N^2) 的复杂度内解决这个问题,时间瓶颈在求解 f 上。

但是,你可以发现,要求的就是第一类斯特林数行,直接套上来就行了。

时间复杂度 O(N\log N)