A101762.Wish I Knew How to Sort
提高+/省选-
官方
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
给定一个长度为 n 的二进制数组 a(数组中的所有元素均为 0 或 1)。你希望将该数组排序,但不幸的是,你的算法老师忘记教你排序算法。你按照如下操作,直到数组变为有序:
- 随机选择两个下标 i 和 j,满足 i<j。在所有满足 1≤i<j≤n 的下标对 (i,j) 中,每一对被选中的概率相等。
- 如果 ai>aj,则交换 ai 和 aj 的值。
在数组变为有序之前,你期望会执行多少次这样的操作?(即操作次数的期望值)
可以证明,答案可以表示为最简分数 qp,其中 p 和 q 为整数,且 q≡0(mod998244353)。请输出整数 p⋅q−1mod998244353。换句话说,输出一个整数 x,满足 0≤x<998244353 且 x⋅q≡p(mod998244353)。
输入格式
每组测试数据包含多组测试用例。第一行包含一个整数 t(1≤t≤105),表示测试用例的数量。
每个测试用例的第一行包含一个整数 n(1≤n≤200000),表示二进制数组的长度。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(ai∈{0,1}),表示数组的元素。
输出格式
对于每个测试用例,输出一个整数,表示 p⋅q−1mod998244353 的值。
输入输出样例
输入#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),则这两个元素会被交换,数组变为有序。否则,如果选择 (1,2) 或 (1,3),则不会发生任何变化。因此,数组在一次操作后变为有序的概率为 31,在两次操作后变为有序的概率为 32⋅31,在三次操作后变为有序的概率为 32⋅32⋅31,以此类推。操作次数的期望值为
i=1∑∞(32)i−1⋅31⋅i=3
在第二个测试用例中,数组已经有序,因此期望操作次数为零。
在第三个测试用例中,期望操作次数为 475,因此答案为 75⋅4−1≡249561107(mod998244353)。