P17762 「奶龙OI」Round 3 - 跑酷大神

题目背景

跑酷大神需要经历严苛的训练!

题目描述

跑酷训练场可以视为一个无限延伸的实数轴,其中有 $2n$ 个正整数位置(可以相同)被特殊标注,称为**跳跃位点**,这些位点的位置由一个正整数数列 $A$ 给定。 跑酷大神小 K 要在跑酷训练场上训练跳跃。具体地,在一次**训练**中,对于一个长为 $2n$ 的跳跃位点数列 $B$,小 K 会对所有**奇数** $i$ 从 $1$ 到 $2n-1$ 依次执行: - 从 $b_i$ 跳跃到 $b_{i+1}$。 显然,每次跳跃途经的位置形成一个实数轴上的区间。对于跳跃位点数列 $B$ 而言,其**训练价值**定义为本次训练的所有 $n$ 次跳跃形成的区间的交区间的长度(如果交区间不存在,那么长度为 $0$)。 为了帮助小 K 制定训练计划,请求出 $A$ 的所有 $(2n)!$ 种重新排列的训练价值的总和(可以证明这是一个整数)对 $998244353$ 取模后的结果。 **注意**: 这里的排列是对 $A$ 中的元素进行排列,而不是只对数值进行排列。 例如对于 $ A=(5,5) $,虽然两个元素的数值相同,但仍有两种元素排列: $$ (a_1,a_2),\quad (a_2,a_1). $$ 它们对应的排列 $B$ 分别为 $$ (5_1,5_2),\quad (5_2,5_1), $$ 下角标是为了区分这个 $5$ 是原序列中第几个 $5$。 上面的这两种排列都需要计入答案。

输入格式

第一行输入一个整数 $T$,表示测试数据的组数。 接下来对于每组测试数据: - 第一行输入一个整数 $n$; - 第二行输入 $2n$ 个整数 $a_1,a_2,\ldots,a_{2n}$。

输出格式

对于每组测试数据,输出一行一个整数,表示所有重排的训练价值之和对 $998244353$ 取模后的结果。

说明/提示

#### 【样例 1 解释】 对于第一组数据,只有两种情况:$(1,2)$ 或是 $(2,1)$,第一种情况是从 $1$ 跳到 $2$,因为只有一个区间所以区间交就是本身,此时答案为 $2-1 = 1$;另一种情况同理,答案也为 $1$,所以最终总和为 $1+1=2$。 对于第二组数据,也只有两种情况,$(5_1,5_2)$ 或是 $(5_2,5_1)$,类似上面的过程,两个的答案都是 $5-5=0$,所以最终总和为 $0$。 对于第三组数据,一种情况是 $(1,3,2,4)$,两个跳跃的区间是 $1\to 3$ 和 $2\to 4$,两个区间的交应当为 $2$ 到 $3$ 这一段,所以这个方案下答案是 $3-2=1$。因为情况数过多,所以只能告诉你这 $4!$ 种情况总和是 $16$。 对于第四组数据,我们暂时无法告诉你为什么答案是 $48$。 #### 【数据范围与约定】 **本题采用捆绑测试。** 对于所有测试数据,保证: - $1\le T\le 2\times 10^5$; - $1\le n\le 2\times 10^5$; - $1\le a_i\le 10^9$; - 单个测试文件内 $\sum n\le 2\times 10^5$。 | Subtask | 特殊限制 | 分值 | | :---: | :--- | :---: | | 1 | $\sum n\le 5$ | $20$ | | 2 | $\sum n\le 10$ | $20$ | | 3 | $\sum n\le 5000$ | $20$ | | 4 | 每组测试中的 $A$ 都是一个长度为 $2n$ 的排列 | $20$ | | 5 | 无特殊限制 | $20$ |