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}$