C1649 [Wannafly冬令营2018Day2]Quicksort

内存限制:256 MB 时间限制:3000 ms

题目描述

小 Q 同学刚刚又写了一个假的快速排序,如下图所示。如果他随机地选择一个 $1$ 到 $n$ 的排列 $p_1, p_2, \cdots, p_n$ 去执行QuickSort(p, 1, n, k)这个过程,你知道这个排列在执行完之后期望会有多少个逆序对吗?

quick-sort.png

提示:一个排列 $p_1, p_2, \cdots, p_n$ 的逆序对个数等于满足 $1 \leq u < v \leq n$ 且 $p_u > p_v$ 的整数二元组 $(u, v)$ 数量。

为了避免可能的精度误差,你只需要给出期望的逆序对数乘以 $n$ 的阶乘后对 $998244353$ 取模的值。显然,这个期望值乘以 $n$ 的阶乘是一个整数。

输入格式

输入包含多组测试数据。第一行包含一个整数 $T$,表示测试数据的组数。随后的内容是各组测试数据。对于每组测试数据:

仅一行,包含两个整数 $n$ 和 $k$。

  • $1 \leq T \leq 3 \times 10^5$
  • $1 \leq n, k \leq 6000$

输出

对于每组测试数据,输出一行Case #x: y,其中x是测试数据的编号(从 $1$ 开始编号),y是这组数据的答案。

样例

样例输入 1

5 5 1 5 2 5 3 5 4 5 5

样例输出 1

Case #1: 600 Case #2: 240 Case #3: 64 Case #4: 8 Case #5: 0

提示