2021 ICPC Asia Taiwan Online Programming Contest
题意
有n个人排队上飞机,我是第n个人,第一个人是醉汉,醉汉不坐自己的位置,占据他人的位置的概率相等。对于剩下的人,如果他的座位没有被占,他会做到自己的座位;否则,他会等概率的坐到空的位置。
问:我的位置(位置n)被占据的概率。
思路
参考题解
醉汉 1 2 3 ··· n - 3 n - 2 自己
以上是n个人:
- 假设醉汉直接坐到了我的位置 p n = 1 n − 1 p_n = \frac1{n -1} pn=n−11
- 假设醉汉坐到了n-2:
那么位于1 ~ n - 3 的人会坐到他们自己的位置,而位于n - 2的人会有两个选择,要是坐到醉汉的位置要么做到我的位置,所以我的位置被占据的概率为 p n − 2 = 1 n − 1 × 1 2 p_{n - 2} = \frac1{n -1} \times\frac 12 pn−2=n−11×21 - 同理分析醉汉坐到位置 n - 3的时候:
1 ~ n - 4的人按他们自己的位置坐,位置n - 3的人会有三个选择:醉汉的位置,位置n - 2,我的位置。
假设n - 3坐到我的位置,我的位置被占据的概率为 1 3 \frac 13 31
假设n - 3坐到醉汉的位置,那么n - 2会坐到他自己的位置,我的位置不会被占据。
假设n - 3坐到n - 2的位置。轮到n - 2时,n - 2有两个选择,我的位置被占据的概率为 1 3 × 1 2 \frac13 \times\frac 12 31×21
综上:醉汉坐到n - 3时,我的位置被占据的概率为:
p n − 3 = 1 n − 1 × ( 1 3 + 0 + 1 3 × 1 2 ) = 1 n − 1 × 1 2 p_{n - 3} = \frac1{n -1} \times(\frac 13 + 0 +\frac13 \times\frac 12) \\= \frac1{n -1} \times\frac 12 pn−3=n−11×(31+0+31×21)=n−11×21 - 醉汉坐到n - 4时,按照上面的分析顺序:(最开始是我的座位,然后依次从前往后分析)
p n − 4 = 1 n − 1 × ( 1 4 + 0 + 1 4 × 1 2 + 1 4 × 1 2 ) = 1 n − 1 × 1 2 p_{n - 4} = \frac1{n -1} \times(\frac14 + 0 + \frac14 \times \frac 12 + \frac14 \times \frac 12)\\ = \frac1{n -1} \times\frac12 pn−4=n−11×(41+0+41×21+41×21)=n−11×21 - 综上分析可得:
无论醉汉坐到哪里:我的位置被占据的概率始终是 1 2 \frac 12 21(假设已知醉汉坐到的位置,且醉汉的坐的位置不是我的位置)。与此同时,醉汉在一开始不占据我的位置的情况下有n - 2个选择。
p ( 我 的 位 置 被 占 据 ) = 1 n − 1 + ( n − 2 ) × 1 n − 1 × 1 2 = n 2 ( n − 1 ) p(我的位置被占据) = \frac1{n -1} +(n - 2)\times \frac1{n-1} \times \frac12 \\= \frac n{2(n - 1)} p(我的位置被占据)=n−11+(n−2)×n−11×21=2(n−1)n
代码
int main()
{
int n; cin >> n;
cout << setprecision(10) << n * 1.0 / (2 * n - 2) << endl;
return 0;
}