题库练习 「2021 营员交流」数串
← 上一题 下一题 →

A6451 | 「2021 营员交流」数串

时间限制1s
内存限制512MB
通过 / 提交0/0

题目描述

本题包含三个问题:

* 问题 0:给定一个长度为 $n$ 的序列**以及它的后缀数组** $\boldsymbol p$,求这个序列中有多少个不同的数。
* 问题 1:给定一个长度为 $n$ 的排列 $\boldsymbol p$,对于所有满足后缀数组为 $\boldsymbol p$ 的长度为 $n$ 的序列,求**不同的数**的数量的**最小值**。
* 问题 2:给定一个长度为 $n$ 的**残缺的**排列 $\tilde {\boldsymbol p}$ (有 $k$ 个位置未知),对于所有 $k!$ 种完整的排列,求**问题 1 的答案之和**。

在不同的测试点中,你将可能需要回答不同的问题。我们将用 $\mathrm{op}$ 来指代你需要回答的问题编号 (对应上述 $0, 1, 2$)。

在问题 2 中,由于答案可能很大,因此你只需要输出答案对 $998244353$ 取模的结果即可。

输入格式

第一行包含两个非负整数 $n, \mathrm{op}$,分别表示鼠的数量和子问题的类型。

如果 $\mathrm{op} = 0$,则第二行包含 $n$ 个正整数 $a_1, a_2, \ldots, a_n$,表示每只鼠的体型大小;第三行包含 $n$ 个正整数 $p_1, p_2, \cdots, p_n$,表示小 S 得到的排列。

如果 $\mathrm{op} = 1$,则第二行包含 $n$ 个正整数 $p_1, p_2, \ldots, p_n$,表示小 S 得到的排列。

如果 $\mathrm{op} = 2$,则第二行包含 $n$ 个非负整数 $\tilde p_1, \tilde p_2, \ldots, \tilde p_n$,表示小 S 的残缺的排列。$\tilde p_i = 0$ 表示这一个值被鼠 "咬掉" 的,否则 $\tilde p_i$ 表示排列中第 $i$ 位的值。

每行中的两个整数之间均用一个空格隔开,鼠的编号是从 $1$ 开始的。

输出格式

输出一行一个整数,表示对应问题的答案对 $998244353$ 取模的结果。

输入输出样例

输入 #1
3 0
10 20 30
1 2 3
输出 #1
3
输入 #2
3 1
1 2 3
输出 #2
2
输入 #3
3 2
0 0 3
输出 #3
5
C++ 编辑器
输入
输出