2019ICPC(银川) - Take Your Seat(概率公式)

题目链接:点击查看

题目大意:朵哈要坐飞机去旅游,出发的时候包括朵哈在内一共有n个人要上飞机,这班飞机有n个座位,第i个人的座位号是i,朵哈的座位号是1。

现在n个人按照座位号是从1到n的顺序上飞机,但朵哈忘了自己的座位,于是她就等概率随机选了一个位置坐下了,而其余人都记得自己的位置,如果他们中的一个人上飞机之后发现自己的位置被占了,则会在剩下的位置中等概率随机选一个坐下,如果没被占,则会直接坐到自己的位置上。

你需要计算最后一个上飞机的人坐到了自己位置上的概率。

朵哈返程的时候,包括她在内的m个人会按照一个随机的座位号上飞机。

这班飞机有m个座位,朵哈的座位号还是1。但是朵哈又一次忘记了自己的座位,并且还是只有她忘记了自己的座位。现在所有人找座位的规则和出发时完全相同,朵哈或任何一个发现自己座位已经被占了的人会等概率随机选一个没被占的座位坐下。

你需要计算最后一个上飞机的人坐到了自己位置上的概率。

题目分析:

我们先来分析第一问,按照顺序上飞机,很容易知道,当n=1时,答案时1,当n=2时,答案是0.5,那么我们来分析一下n大于等于3的情况,我们设f(i)为飞机上一共有i个人时的概率

  1. 当朵哈坐在1号位,那么剩下n-1个人包括最后一个人在内,肯定都能坐到自己的位置,所以此时概率为1
  2. 当朵哈坐在n号位,那么第n个人最后上飞机,肯定坐不到自己的位置了,所以此时概率为0
  3. 当朵哈坐在第k号位,那么第2~k-1个人可以坐在自己的位置上,轮到第k个人时会开始随机坐,那么我们不妨将第k个人视为朵哈,将剩余的n-k个空位,视为新的n,以此类推,这样递推关系就很清晰了:f(n)=(1+f(2)+f(3)+……+f(n-2)+f(n-1))/n

其实自己在纸上画一画n=3和n=4的情况,应该一下子也能确定第一问的概率当n大于等于2时时恒等于0.5的了。。

接下来我们在第一问的基础上讨论第二问:

  1. 如果朵哈第1个上飞机,那么问题就转化成了求f(m)
  2. 如果朵哈第2个上飞机,因为第一个人肯定坐在了自己的位置上,那么就是求f(m-1)
  3. 如果朵哈第3个上飞机,因为前两个人肯定坐在了自己的位置上,那么就是求f(m-2)
  4. 如果朵哈第k个上飞机,因为前k-1个人肯定坐在了自己的座位上,那么就是求f(m-k+1)
  5. 如果朵哈最后一个上飞机,那概率肯定时1

又因为f(2)=f(3)=f(4)=……=f(n-1)=f(n)=0.5,

所以我们分两种情况即可:

  1. 如果朵哈最后一个上飞机,概率为1
  2. 如果朵哈不是最后一个上飞机,概率为0.5

而朵哈上飞机的顺序是随机的,所以朵哈最后一个上飞机的概率为1/m,所以第二问的公式也就推出来了:

f(m)=(1/m)*1+(m-1/m)*0.5=(m+1)/(2*m),n==1时也适用

上代码:

#include<iostream>
#include<cstdio> 
#include<string>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<cmath>
#include<set>
#include<sstream>
using namespace std;

typedef long long LL;

const int inf=0x3f3f3f3f;

const int N=1e6+100;

int main()
{
//	freopen("input.txt","r",stdin);
	int w;
	cin>>w;
	int kase=0;	
	while(w--)
	{
		int n,m;
		scanf("%d%d",&n,&m);
		printf("Case #%d: ",++kase);
		if(n==1)
			printf("%.6f",1.0);
		else
			printf("%.6f",0.5);
		printf(" %.6f\n",((m+1)*1.0)/(2*m*1.0));
	}
	
	
	
	
	
	
	
	
	
	
	return 0;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frozen_Guardian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值