2018-2019 ACM-ICPC, China Multi-Provincial Collegiate D. Take Your Seat(数学概率)

Posted issue是fw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-2019 ACM-ICPC, China Multi-Provincial Collegiate D. Take Your Seat(数学概率)相关的知识,希望对你有一定的参考价值。

LINK

题意

子问题一

现在有 n n n名乘客,第 i i i名乘客的座位是编号 i i i

现在第一个乘客丢了座位票,所以他会随机找一个位置坐下

然后第二个,第三个乘客按顺序来选座位…

如果他的座位被占据了,他会随机选一个空闲的坐下,否则做原来的位置

问最后一个乘客做自己位置的概率

子问题二

现在 1.. m 1..m 1..m名乘客不是按顺序选座,而是以随机的顺序,显然有 m ! m! m!种顺序

问最后一个上飞机的乘客坐上正确位子的概况


子问题一

①.若 1 1 1号做对了位置,那么所有人都可以做对位置

否则

②.若 1 1 1号做到了 k k k位置,那么 [ 2 , k − 1 ] [2,k-1] [2,k1]都做自己的位置

k k k人要么做 1 1 1号位置,要么做 [ k + 1 , n ] [k+1,n] [k+1,n]的位置之一

如果做 1 1 1号位置,问题结束,之后左右人可以做对位置

如果做 [ k + 1 , n ] [k+1,n] [k+1,n]的位置之一,子问题,可以递归下去

递推式如下

	f[1] = 0, f[2] = 0.5;
	for(int i=3;i<=50;i++)
	{
		double p = 1.0/i;
		f[i] = p;//一开始就做对了位置
		for(int k=2;k<=i;k++)	f[i] += p*f[i-k+1]; //做到第k个位置 
	}

子问题二

1 1 1号人最后一个上飞机,显然所有人可以坐在自己的位子上,此时概率为 1 1 1

否则第 1 1 1个人在第 i i i次上飞机,最后一个人做对概率恒等于 0.5 0.5 0.5,这就是子问题一

所以 a n s = 1 m + 1 2 ∗ 1 m = m + 1 2 m ans=\\frac{1}{m}+\\frac{1}{2}*\\frac{1}{m}=\\frac{m+1}{2m} ans=m1+21m1=2mm+1

#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e6+10;
double f[maxn];
int n,m,t,casenum;
int main()
{
	cin >> t;
	while( t-- )
	{
		cin >> n >> m;
		printf("Case #%d: ",++casenum);
		if( n==1 )	printf("1.000000 ");
		else	printf("0.500000 ");
		printf("%.6lf\\n",(m+1.0)/(2*m) );
	}
}

以上是关于2018-2019 ACM-ICPC, China Multi-Provincial Collegiate D. Take Your Seat(数学概率)的主要内容,如果未能解决你的问题,请参考以下文章

2018-2019 ACM-ICPC, China Multi-Provincial Collegiate G. Factories(树形dp+算贡献)

2018-2019 ACM-ICPC, China Multi-Provincial Collegiate D. Take Your Seat(数学概率)

2016-2017 ACM-ICPC CHINA-Final

2016-2017 ACM-ICPC CHINA-Final Solution

2016-2017 ACM-ICPC CHINA-Final 个人题解

The 2018 ACM-ICPC China JiangSu Provincial Programming Contest(第六场)