uoj#P986. 【UNR #9】Sing

【UNR #9】Sing

在一次 UOI 的 Day 1.5,在校园里游走的 Crysflea 遇见了在 $9107$ 开音趴的跳蚤们。

在 $9107$ 小房间里有 $n$ 位跳蚤在唱歌,音量分别为 $1\sim n$ 中的不同整数,第 $i$ 个跳蚤的音量为 $p_i$。

Crysflea 定义了一个常数 $k\in [0,n)$,他认为如果不存在任意一对跳蚤 $(i,j)$,满足 $p_i>j+k$ 且 $p_j>i+k\ (i\ne j)$,那么这个排列方式是和谐的。

岁月流转,Crysflea 已经无法追忆起当时的排列,他只记得一些位置上的跳蚤。

具体地,他的记忆中有一个长度为 $n$ 的序列 $a$,若 $a_i\ne 0$,则第 $i$ 个位置的跳蚤音量为 $a_i$,否则并不确定。

现在 Crysflea 想让你求出有多少个符合记忆的排列,使得排列是和谐的。答案对 $998244353$ 取模。

输入格式

第一行两个整数 $T,O$,表示数据组数和子任务编号。对于样例,$O=0$。

对于每组数据:

第一行两个整数 $n,k$。

第二行一个长度为 $n$ 的序列 $a$,满足 $0\le a_i\le n$。

输出格式

一行一个整数,表示答案。

3 0
3 0
0 0 0
5 1
4 0 0 0 0
7 2
0 0 2 0 5 0 0
5
12
82

对于第一个样例,合法的排列有 $(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2)$。

样例二

见下发文件。

数据范围

对于所有数据,$1\le \sum n\le 8000$,$0\le k < n$,$0\le a_i\le n$;保证对于 $a_i>0$,没有两个相同的 $a_i$。

对于每个子任务中,我们会按照如下评分:

  • 如果没有通过 $a_i$ 全部为 $0$ 的数据,获得 $0\%$ 的分数。
  • 如果通过了所有 $a_i$ 全部为 $0$ 的数据,没有通过所有数据,获得 $60\%$ 的分数。
  • 如果通过了所有数据,获得 $100\%$ 的分数。

请注意,对于一个测试点,即使你不会做 $a_i\ne 0$ 的数据,也要根据格式,对应输出一个整数,否则会被判为 $0$ 分;TLE 或 RE 等也会导致 $0$ 分。

子任务编号 $\sum n\le$ 特殊性质 分值
$1$ $10$ / $5$
$2$ $1000$ $k=0$ $15$
$3$ $1000$ $k\le 1$ $10$
$4$ $1000$ $k\le 3$ $10$
$5$ $1000$ $k\le 5$ $10$
$6$ $1000$ $k\le 8$ $10$
$7$ $50$ / $10$
$8$ $100$ $10$
$9$ $500$ $10$
$10$ $8000$ $10$

时间限制:$\texttt{2s}$

空间限制:$\texttt{1GB}$