A101762.Wish I Knew How to Sort

提高+/省选-

官方

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定一个长度为 nn 的二进制数组 aa(数组中的所有元素均为 0011)。你希望将该数组排序,但不幸的是,你的算法老师忘记教你排序算法。你按照如下操作,直到数组变为有序:

  1. 随机选择两个下标 iijj,满足 i<ji < j。在所有满足 1i<jn1 \le i < j \le n 的下标对 (i,j)(i, j) 中,每一对被选中的概率相等。
  2. 如果 ai>aja_i > a_j,则交换 aia_iaja_j 的值。

在数组变为有序之前,你期望会执行多少次这样的操作?(即操作次数的期望值)

可以证明,答案可以表示为最简分数 pq\frac{p}{q},其中 ppqq 为整数,且 q≢0(mod998244353)q \not\equiv 0 \pmod{998\,244\,353}。请输出整数 pq1mod998244353p \cdot q^{-1} \bmod 998\,244\,353。换句话说,输出一个整数 xx,满足 0x<9982443530 \le x < 998\,244\,353xqp(mod998244353)x \cdot q \equiv p \pmod{998\,244\,353}

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 tt1t1051 \le t \le 10^5),表示测试用例的数量。

每个测试用例的第一行包含一个整数 nn1n2000001 \le n \le 200\,000),表示二进制数组的长度。

每个测试用例的第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_nai{0,1}a_i \in \{0, 1\}),表示数组的元素。

输出格式

对于每个测试用例,输出一个整数,表示 pq1mod998244353p \cdot q^{-1} \bmod 998\,244\,353 的值。

输入输出样例

  • 输入#1

    3
    3
    0 1 0
    5
    0 0 1 1 1
    6
    1 1 1 0 0 1
    

    输出#1

    3
    0
    249561107
    

说明/提示

样例解释

考虑第一个测试用例。如果选择下标对 (2,3)(2, 3),则这两个元素会被交换,数组变为有序。否则,如果选择 (1,2)(1, 2)(1,3)(1, 3),则不会发生任何变化。因此,数组在一次操作后变为有序的概率为 13\frac{1}{3},在两次操作后变为有序的概率为 2313\frac{2}{3} \cdot \frac{1}{3},在三次操作后变为有序的概率为 232313\frac{2}{3} \cdot \frac{2}{3} \cdot \frac{1}{3},以此类推。操作次数的期望值为

i=1(23)i113i=3\sum \limits_{i=1}^{\infty} \left(\frac{2}{3} \right)^{i - 1} \cdot \frac{1}{3} \cdot i = 3

在第二个测试用例中,数组已经有序,因此期望操作次数为零。

在第三个测试用例中,期望操作次数为 754\frac{75}{4},因此答案为 7541249561107(mod998244353)75 \cdot 4^{-1} \equiv 249\,561\,107 \pmod {998\,244\,353}

首页