CFCF2154F1.Bombing (Easy Version)
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是本题的简单版本。不同版本的区别在于本版本中 n≤3000。只有当你解决了所有版本的问题后,才可以进行 hack。
如果一个排列 b 是排列 a 的一次 “riffle shuffle”,需要满足 ∣a∣=∣b∣,并且存在一个 k,1≤k<∣a∣,使得 a1,a2,…,ak 和 ak+1,ak+2,…,a∣a∣ 都是 b 的子序列。
例如,[1,4,5,2,3,6] 是 [1,2,3,4,5,6] 的一次 riffle shuffle,因为我们可以选 k=3,且 [1,2,3] 和 [4,5,6] 都是子序列。
给定一个长度为 n 的排列 p,其中有些位置被替换为 −1。请你计算有多少种方式将每个 −1 替换为一个整数,使得 p 变成 [1,2,…,n](即升序排列)的一个 riffle shuffle。
由于方案数可能非常大,请你输出其对 998244353 取模的结果。
∗ 一个长度为 n 的排列是由 1 到 n 的 n 个互不相同的整数按任意顺序组成的数组。例如,[2,3,1,5,4] 是一个排列,但 [1,2,2] 不是(2 出现了两次),[1,3,4] 也不是(n=3,但出现了 4)。
† 如果一个序列 c 能通过从另一个序列 d 删除若干(可以为零或全部)元素而得到,那么称 c 是 d 的子序列。
输入格式
每个测试用例包含多组数据。第一行为测试用例个数 t(1≤t≤100)。下接每组测试数据。
每组测试数据第一行为排列的长度 n(2≤n≤3000)。
第二行为 n 个整数 p1,p2,…,pn(1≤pi≤n 或 pi=−1)——排列 p 的元素。所有非 −1 的 pi 两两不相同。
所有测试用例中 n 的总和不超过 3000。
输出格式
对于每个测试用例,输出一个整数,表示将 p 填补为 [1,2,…,n] 的一次 riffle shuffle 的方案数,对 998244353 取模。
输入输出样例
输入#1
7 5 -1 -1 -1 -1 -1 4 1 2 3 4 5 -1 -1 -1 2 -1 6 -1 3 2 1 -1 -1 18 11 -1 2 -1 -1 -1 -1 6 -1 -1 14 8 9 15 -1 -1 -1 -1 6 -1 3 -1 4 -1 5 3 -1 2 1
输出#1
27 1 6 0 32 0 0
说明/提示
第三个测试用例可能的排列如下:
- [1,3,4,2,5],
- [1,4,5,2,3],
- [3,1,4,2,5],
- [3,4,1,2,5],
- [4,1,5,2,3],
- [4,5,1,2,3]。