CF1951G.Clacking Balls
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
ඞ
有 m 个篮子沿着一个圆圈顺时针排列,编号为 1 到 m(第 m 号篮子与第 1 号篮子相邻)。此外,有 n 个球,第 i 个球最初放在第 ai 号篮子中,且每个篮子最多只含有一个球。
Alice 可以进行如下操作,每次操作无论是否移动/扔掉球都恰好耗时一秒:
- Alice 从 1 到 n 中等概率随机选择一个整数 i。
- 如果第 i 个球已经被扔掉,则什么也不做。
- 否则,将第 i 个球从当前所在的篮子移动到下一个篮子(顺时针方向)。如果目标篮子中已经有另一个球 j,则将球 j 扔掉。
她重复上述操作,直到只剩下一个球为止。请计算 Alice 结束该过程所需的期望时间(单位为秒)。
可以证明,答案可以表示为最简分数 qp,其中 p 和 q 互质。你需要输出 p⋅q−1mod109+7。可以保证 109+7∤q。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 t(1≤t≤104)——表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 n 和 m(1≤n≤3⋅105,n≤m≤109)——球的数量和篮子的数量。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤m,ai 两两不同)——每个球的初始位置。
保证所有测试用例中 n 的总和不超过 3⋅105。
输出格式
对于每个测试用例,输出一个整数:Alice 结束该过程所需的期望时间(单位为秒),对 109+7 取模。
输入输出样例
输入#1
5 3 10 5 1 4 2 15 15 1 6 6 1 2 3 4 5 6 6 9 6 5 4 3 2 1 1 100 69
输出#1
600000042 14 35 333333409 0
说明/提示
在第一个测试用例中,Alice 可能的操作如下(若球 i 已被扔掉,则定义 ai=−1):
- 初始时,a=[5,1,4]。
- Alice 以 31 的概率选择 i=2,将球 2 移动到篮子 2。此时 a=[5,2,4]。
- Alice 以 31 的概率选择 i=2,将球 2 移动到篮子 3。此时 a=[5,3,4]。
- Alice 以 31 的概率选择 i=2,将球 2 移动到篮子 4。由于篮子 4 原本有球 3,球 3 被扔掉。此时 a=[5,4,−1]。
- Alice 以 31 的概率选择 i=3。球 3 已被扔掉,什么也不做。此时 a=[5,4,−1]。
- Alice 以 31 的概率选择 i=2,将球 2 移动到篮子 5,球 1 被扔掉。此时 a=[−1,5,−1],过程结束。
本测试用例的答案为 5189。第二个测试用例的答案为 14(注意这两个球最初相邻)。
第三个测试用例的答案为 35。
第四个测试用例的答案为 3220。
第五个测试用例中,初始时只有一个球,答案为 0。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?