QOJ.ac

QOJ

Time Limit: 1.5 s Memory Limit: 512 MB Total points: 100 Hackable ✓

#12838. 兄妹

Statistics

Jin Song 和 Jin Hui 是兄妹。他们就读于同一所大学。Jin Song 是 ICPC 训练俱乐部的成员,而 Jin Hui 是英语俱乐部的成员。

今天是 Jin Hui 的 17 岁生日,也是她在大学度过的第一个生日。作为一名好哥哥,Jin Song 为他漂亮的妹妹准备了一份精美的礼物。但调皮的妹妹在他起床前就去了学校,于是他决定去英语俱乐部把生日礼物送给她。

Jin Hui 是一个非常聪明的女孩,她想到哥哥一定会来找她,于是决定为他准备一个有趣的恶作剧。她在英语俱乐部有 $n$ 个伙伴,他们都同意了她的主意。首先,Jin Hui 给自己和所有伙伴分配了编号:Jin Hui 的编号为 0,伙伴们的编号为 $1$ 到 $n$ 的不同整数。然后,她让伙伴们穿上和她一模一样的制服,戴上厚厚的眼镜,这样 $n+1$ 个女孩看起来就完全一样了。结果,Jin Song 会感到困惑并试图找到他的妹妹。恶作剧的过程如下:

  1. 他随机且均匀地选择一个尚未被询问过的女孩 $i$。
  2. 他询问被选中的女孩:“你是我的妹妹吗?”如果当前的女孩 $i$ 是 Jin Hui(即 $i = 0$),她将立即结束这个恶作剧。否则,女孩 $i$ 会说 Jin Hui 是女孩 $p_i$。数字 $p_i$ 是在 Jin Song 到来之前商定好的。
  3. 如果 $p_i = i$(因此,一个伙伴女孩说她是 Jin Hui)或者 Jin Song 之前已经询问过女孩 $p_i$,他就会发现女孩在撒谎,并回到第 1 步。否则,他将继续询问女孩 $p_i$,并回到第 2 步。

Jin Song 想尽快找到他的妹妹,他想知道找到他聪明的妹妹需要多长时间。

你的任务是求出 Jin Song 在恶作剧结束前需要询问的女孩数量(包括他的妹妹)的期望值。

输入格式

第一行包含一个整数 $T$,表示测试用例的数量 ($1 \le T \le 10$)。

每个测试用例包含两行。第一行包含一个整数 $n$,表示 Jin Hui 的伙伴数量 ($1 \le n \le 10^5$)。第二行包含 $n$ 个空格分隔的整数 $p_1, p_2, \dots, p_n$,其中 $p_i$ 是女孩 $i$ 将 Jin Song 引向的伙伴编号 ($1 \le p_i \le n$)。

输出格式

可以证明期望值可以表示为不可约分数 $p/q$(即 $p$ 和 $q$ 是互质整数)。因此,对于每个测试用例,请打印一行,包含一个整数:$(p \cdot q^{-1}) \pmod{10^9 + 7}$ 的值。

样例

输入 1

1
3
2 3 1

输出 1

250000005

说明

在样例中,有 4 种选择第一个女孩的方法。在 Jin Song 选择第一个女孩后,接下来的过程是唯一确定的。一种方法是先选择他的妹妹,其余的是选择 1、2 或 3。

如果他先选择他的妹妹,恶作剧立即结束,他总共询问了 1 个女孩。

如果他先选择女孩 1,那么他将询问三个女孩:1、2 和 3。然后他会发现她们在撒谎,并直接去找他的妹妹。所以他总共询问了 4 个女孩,顺序为 1, 2, 3, 0。

先选择女孩 2 或 3 的情况与选择女孩 1 类似:女孩的序列分别为 2, 3, 1, 0 和 3, 1, 2, 0。

每种情况发生的概率均为 $1/4$。

因此,答案是 $((1 + 4 + 4 + 4) \cdot 4^{-1}) \pmod{10^9 + 7} = 250\,000\,005$。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.