AT_arc118_e [ARC118E] Avoid Permutations

题目描述

对于 $(1, 2, \ldots, N)$ 的一个排列 $P = (P_1, P_2, \ldots, P_N)$,我们考虑如下问题,并将其答案记作 $f(P)$。 > 有一个 $(N+2)\times (N+2)$ 的格子,行号从上到下依次为 $0, 1, \ldots, N+1$,列号从左到右依次为 $0, 1, \ldots, N+1$。第 $i$ 行第 $j$ 列的格子记作 $(i, j)$。 > > 从 $(0, 0)$ 出发,每次只能向右或向下移动到相邻的格子,最终到达 $(N+1, N+1)$。但对于所有 $1\leq i\leq N$,格子 $(i, P_i)$ 不允许经过。问这样的路径有多少条? 给定正整数 $N$ 以及整数序列 $A = (A_1, A_2, \ldots, A_N)$。每个 $A_i$ 要么为 $-1$,要么为 $1$ 到 $N$ 之间的整数。 我们考虑所有满足 $A_i \neq -1 \implies P_i = A_i$ 的 $(1, 2, \ldots, N)$ 的排列 $P = (P_1, P_2, \ldots, P_N)$。对于所有这样的 $P$,求 $\sum f(P)$,并对 $998244353$ 取模。

输入格式

输入为一行,格式如下: > $N$ $A_1$ $A_2$ $\ldots$ $A_N$

输出格式

输出答案。

说明/提示

### 数据范围 - $1 \leq N \leq 200$ - $A_i = -1$ 或 $1 \leq A_i \leq N$ - 对于 $i \neq j$,若 $A_i \neq -1$ 且 $A_j \neq -1$,则 $A_i \neq A_j$ ### 样例解释 1 有两个排列 $P = (1, 2, 4, 3)$ 和 $P = (1, 3, 4, 2)$,需要分别计算 $f(P)$ 并求和。对于每个 $P$,在格子中不可经过的格子如下(可经过用 `.` 表示,不可经过用 `#` 表示): ``` ...... ...... .#.... .#.... ..#... ...#.. ....#. ....#. ...#.. ..#... ...... ...... P=(1,2,4,3) P=(1,3,4,2) ``` - 对于排列 $P = (1, 2, 4, 3)$,有 $f(P) = 18$。 - 对于排列 $P = (1, 3, 4, 2)$,有 $f(P) = 23$。 它们的和 $41$ 即为答案。 ### 样例解释 2 本例中,唯一满足条件的排列为 $P = (4, 3, 2, 1)$。 ### 样例解释 3 - 对于排列 $P = (1, 2, 3)$,有 $f(P) = 10$。 - 对于排列 $P = (1, 3, 2)$,有 $f(P) = 6$。 - 对于排列 $P = (2, 1, 3)$,有 $f(P) = 6$。 - 对于排列 $P = (2, 3, 1)$,有 $f(P) = 12$。 - 对于排列 $P = (3, 1, 2)$,有 $f(P) = 12$。 - 对于排列 $P = (3, 2, 1)$,有 $f(P) = 2$。 它们的和 $48$ 即为答案。 由 ChatGPT 4.1 翻译