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(数学概率)相关的知识,希望对你有一定的参考价值。
题意
子问题一
现在有 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,k−1]都做自己的位置
而 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+21∗m1=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(第六场)