题面
试图构造二分图的模型,若第
i
i
i个位置上的数为
a
i
a_i
ai,那么左侧的
i
i
i向
a
i
a_i
ai连边.
考虑用容斥计算答案,显然
a
n
s
=
∑
i
=
0
n
f
i
(
n
−
i
)
!
(
−
1
)
i
ans=\sum_{i=0}^{n}f_i(n-i)!(-1)^i
ans=i=0∑nfi(n−i)!(−1)i
f
i
f_i
fi为有
i
i
i个数不满足条件的合法排列数,即在二分图中选了
i
i
i条边的方案数
二分图中的联通块只有两种,一种边数只有
n
/
k
−
1
n/k-1
n/k−1条,有
k
−
n
k-n%k
k−n个;另一种有
n
/
k
n/k
n/k条,有
n
n%k
n个显然一种合法的排列是不能选相邻两条边的,根据排列组合公式,
n
n
n条边中选
m
m
m条的方案数为
C
n
−
m
+
1
m
C_{n-m+1}^{m}
Cn−m+1m种(把
m
−
1
m-1
m−1条边与右边的边绑定,选了它那么右边的边就不能选)
然后就是类似背包的方法合并所有联通块,暴力卷积卷一下就好了
多项式快速幂的时候只要开头结尾NTT一下就好了,中间对每一项做普通快速幂就行