AT_abc330_g [ABC330G] Inversion Squared
题目描述
给定一个长度为 $N$ 的数列 $A = (A_1, \ldots, A_N)$。$A$ 的每个元素要么是 $-1$,要么是 $1$ 到 $N$ 之间的整数,并且 $1$ 到 $N$ 的每个整数在 $A$ 中最多出现一次。
对于 $1$ 到 $N$ 的一个排列 $P = (P_1, \ldots, P_N)$,如果满足 $A_i \neq -1 \Rightarrow P_i = A_i$,则称 $P$ 为**良好排列**。请你求出所有良好排列的逆序数的平方和,并对 $998244353$ 取模。
排列 $P$ 的逆序数定义为满足 $1 \leq i < j \leq N$ 且 $P_i > P_j$ 的整数对 $(i, j)$ 的个数。
输入格式
输入从标准输入读入,格式如下:
> $N$ $A_1$ $A_2$ $\ldots$ $A_N$
输出格式
输出答案。
说明/提示
## 限制条件
- $1 \leq N \leq 3000$
- $1 \leq A_i \leq N$ 或 $A_i = -1$
- $A$ 中 $1, \ldots, N$ 每个数最多出现一次
- 输入均为整数
## 样例解释 1
良好排列有 $P = (3, 1, 2, 4)$ 和 $P = (3, 4, 2, 1)$ 共 $2$ 个,逆序数分别为 $2$ 和 $5$。因此答案为 $2^2 + 5^2 = 29$。
## 样例解释 3
请对 $998244353$ 取模后输出答案。
由 ChatGPT 4.1 翻译