Take Your Seat Gym - 102222D【数学+概率】
题意:
Duha 是 \(1\) 号乘客,且只有他丢失了他的机票,其他乘客没有。
在去的时候,他是第一个上飞机的,而且他随机选择一个座位,后面的乘客如果发现座位被占,也会随机选择一个座位。求最后一个乘客坐在自己位置上的概率。
回来的时候,上飞机的顺序是随意的,问最后一个乘客坐在自己位置上的概率。
数据范围:\(1\leq n,m \leq 50\)
分析:
第一问:
\(n=1:p[1]=1;\)
\(n=2:p[2]=\frac{1}{2}+0=\frac{1}{2};\)
\(n=3:\frac{1}{3}+\frac{1}{3}*p[2]+\frac{1}{3}*0=\frac{1}{2};\)
\(n=4:\frac{1}{4}+\frac{1}{4}*p[2]+\frac{1}{4}*p[3]+\frac{1}{4}*0=\frac{1}{2};\)
\(p[n]=\frac{1}{n}+\frac{1}{n}*p[2]+\frac{1}{n}*p[3]+...+\frac{1}{n}*p[n-1]+\frac{1}{n}*0=\frac{n}{2n}=\frac{1}{2};\)
第二问:
在第一问的基础上进行推导;
\(p=\frac{1}{m}*(1+\frac{1}{2}*(m-1))=\frac{m+1}{2m}\)
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,n,m,cot=0;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
double ans1=0.5,ans2=1.0*(m+1)/(2*m);
if(n==1)
ans1=1;
printf("Case #%d: ",++cot);
printf("%.6f %.6f\n",ans1,ans2);
}
return 0;
}