Take Your Seat - 银川网络赛D(思维+找规律)

题目链接:https://cn.vjudge.net/problem/Gym-102222D

题目大意:题目一共有两问:第一问:有n个人按顺序上飞机,主人公Duha在其中,Duha的编号是1,但是Duha忘了自己是哪个座位,他随机从n个座位找一个座位坐,随后上飞机的人如果发现自己的座被占,他便会在剩余的座位中随即找一个座,问最后一个人做到正确位置的概率是多少?

第二问:n个人不按顺序上飞机,依旧是Duha忘记了位置,因此Duha上飞机后会随机坐,问此时最后一人坐到正确位置的概率是多少?

思路:第一问:读完题便有一个大胆的想法,当n>=2时,概率都是 1/2,(当时想的是最后一个人只有两种情况,对与错),下面来证明一下:

当 n = 1时,Duha肯定能做对,故概率为1.

当 n = 2时,Duha有两种情况选择,一种对,一种错,故概率为1/2;

当 n = 3 时

  1. 当Duha 选择了自己的位置 ,则后面的乘客都能做到正确的位置 ,此时概率为 1/3;
  2. 当Duha选择了2位置,则2号上飞机时就会随机选择,只有两个位置可以选(1/2),故最后一位乘客正确的概率 1/3*1/2;
  3. 当Duha选择了3位置,则3号位置一定是错误的,故概率为0;

 故 P(3)=1/3 + 1/3*1/2 + 0 = 1/2;

当 n = 4 时

  1. 当Duha选对了位置,概率为1/4(同n=3时)
  2. 当Duha选择了2位置,则2号乘客上车时的状态和Duha时一样的,在n-1个座位中选择 ,则为1/4*P(3);
  3. 当Duha选择了3位置,则2号乘客能够选对,此时3号乘客的状态与Duha相同,在n-2个座位中选择,则为1/4*P(2);
  4. 当Duha选择了4位置,则最后一位乘客一定不能做到正确位置,故概率为0;

故 P(4)= 1/4 +1/4*P(3)+ 1/4*P(2)+0 = 1/2;

总结归纳 P(n)=1/n + 1/n * p( n - 1)+1/n * p(n-2)+ …… + 1/n * p(2) +0 

                           =1/n + 1/2 *1/n*(n-2) = 1/2;

故当n=1时 P = 1 ; 当 n >1 时,P =1/2;(当时做题时直接莽过去了,也没证明)

第二问:乘客乱序上飞机,则乘客在Duha上飞机前上飞机前上都能做到正确位置,则剩下的人为n-i(i为Duha上之前已经上的人数),又回到了第一问的情况,P(n-i+1),则每种i的概率为 1/n ,则总的概率为 1/n *(P(1)+P(2) + P(2)+……+P(n) )= 1/n *(1 + (n-2)*1/2)= (n+1)/2m (做题时队友玄学推出公式,tql)

官方题解附图(另一种解释)

                                      

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	int Case =1;
	while(t--)
	{
		int n,m;
		scanf("%d%d",&n,&m);
		printf("Case #%d: %.6lf %.6lf\n",Case++,n==1?1:0.5,m==1?1:1.0*(m+1)/2/m);
	}
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值