1.3 KiB
1.3 KiB
冒泡
题目描述
对于一个 1\sim n
的排列 a
和一个数 $m$,定义 f(a,m)
为恰好经过 m
轮冒泡排序后变为 a
的不同排列数量。
一轮冒泡排序的过程如下:从小到大依次考虑每个 $i \in [1,n)$,如果 $a[i]>a[i+1]$,那么就交换 a[i]
和 $a[i+1]$。
给定 n,m
和一个长度为 n
的序列 $lim$。一个排列 a
合法当且仅当 $\forall i$,如果 $lim[i]\ne 0$,那么 $a[i] = lim[i]$。
你需要求出所有合法的 a
的 f(a,m)
之和。答案对 998244353
取模。
输入格式
第一行,共两个数,表示 $n,m$。
第二行,共 n
个数,表示 $lim[1...n]$。
输出格式
共一行,一个数,表示答案。
样例 #1
样例输入 #1
6 2
0 0 0 0 0 0
样例输出 #1
720
样例 #2
样例输入 #2
6 0
6 0 1 4 0 0
样例输出 #2
6
样例 #3
样例输入 #3
见下发样例
样例输出 #3
提示
对于 100% 的数据,$1\le n\le 5000, 0\le m\le n, 0\le lim[i]\le n$,保证 lim[i]
互不相同。
子任务1(10pts):n\le 8
子任务2(40pts):所有 lim[i]\ne 0
子任务3(20pts):n\le 100
子任务4(30pts):无特殊限制