77 lines
1.3 KiB
Markdown
77 lines
1.3 KiB
Markdown
# 冒泡
|
||
|
||
## 题目描述
|
||
|
||
对于一个 $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):无特殊限制 |