CF2064E Mycraft Sand Sort

题目描述

Steve 有一个排列 $p$ 和一个数组 $c$,它们的长度均为 $n$。Steve 希望对排列 $p$ 进行排序。 Steve 有无限多的彩色沙块,他用这些沙块发明了一种基于物理的排序方法,称为重力排序。具体来说,对 $p$ 进行重力排序的步骤如下: - 对于所有满足 $1 \le i \le n$ 的 $i$,在所有 $1 \le j \le p_i$ 的位置 $(i, j)$ 上放置一个颜色为 $c_i$ 的沙块。这里,位置 $(x, y)$ 表示从上往下第 $x$ 行、从左往右第 $y$ 列的格子。 - 对整个数组施加向下的重力,使所有沙块尽可能下落。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2064E/bacbf9735e7645cca9c686c572d9f449ff8d01a4.png) 这是第三个测试用例的重力排序示例。$p = [4, 2, 3, 1, 5]$,$c = [2, 1, 4, 1, 5]$。 Alex 在 Steve 完成重力排序后观察沙块,想知道有多少对数组 $(p', c')$,其中 $p'$ 是一个排列,能够产生与当前相同的沙块布局。注意,原始的数组对 $(p, c)$ 总是会被计入答案。 请你帮 Alex 计算这个数量。由于答案可能很大,请对 $998\,244\,353$ 取模后输出。 $^{\text{∗}}$ 长度为 $n$ 的排列是一个包含 $1$ 到 $n$ 的 $n$ 个互不相同整数的数组。例如,$[2,3,1,5,4]$ 是一个排列,但 $[1,2,2]$ 不是($2$ 出现了两次),$[1,3,4]$ 也不是($n=3$,但出现了 $4$)。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$)——表示测试用例的数量。 每个测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$)——数组的长度。 接下来一行包含 $n$ 个互不相同的整数 $p_1,p_2,\ldots,p_n$($1 \le p_i \le n$)——排列 $p$ 的元素。 接下来一行包含 $n$ 个整数 $c_1,c_2,\ldots,c_n$($1 \le c_i \le n$)——数组 $c$ 的元素。 所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一个整数,表示 Steve 可能开始的数组对 $(p', c')$ 的数量,对 $998\,244\,353$ 取模。

说明/提示

第二个测试用例如下图所示。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2064E/b18fd20848076bc3f7761173879dc3bf19a532a5.png) 这是第二个测试用例的重力排序结果。可以证明,$p$ 的所有排列都会产生相同的结果,并且 $c$ 必须为 $[1,1,1,1,1]$(因为所有沙块颜色必须相同),所以答案是 $5! = 120$。 第三个测试用例如题面所示。可以证明,没有其他数组 $p$ 和 $c$ 能产生相同的最终结果,所以答案是 $1$。 由 ChatGPT 4.1 翻译