【ACM算法】Take Your Seat

分析:

这个题是一个概率公式推导题。

第一种情况是,所有人按座号顺序入场,朵哈忘了座号,如果做别人的,别人也会随机做别的位置

当n = 1 时 概率为1

当n = 2时 概率为1/2

当n = k时 通过分析由于朵哈是第一个找座位,如果他找对座位,呢么概率为1 如果他坐在了i的位置,呢么i之前的所有人都可以找对座位,这样每次都剩下n-i~n n个座位让最后n-i个人随机选。

当 k =n-3时 概率为 1/3 + 1/3*1/2 +1/3 * 0 = 1/2

当 k =n-4时 概率为 1/4 + 1/4*1/2 +1/4 * 1/2 + 1/4 * 0 =1/2

由此推出一般通解 n >=2  Pn =  1/n + 1/n * 1/2 *(n-2)

P = (P1+P2+P3+···+Pn−1)/n Pi为朵哈选第i个座位时 最后一个人坐n的概率

P = 1/2

 

第一种情况是,所有人不按座号顺序入场,朵哈忘了座号,如果做别人的,别人也会随机做别的位置

分析如果 1 是第 i 个登机的,那么登机的前 i − 1 人都能坐对,而且由于不是按顺序的Pn 的n 表示朵哈是第几个登机的

P =(Pm+Pm-1+....P2+P1)/m = (m+1)/(m*2)

#include <iostream>
#include <iomanip>

using namespace std;



int main() {
	int T;
	int num = 1;
	cin >> T;
	while(T--) {
		int n, m;
		cin >> n >> m;
		cout << "Case #" << num++ << ": ";
		if(n == 1) cout << setiosflags(ios::fixed) <<setprecision(7) << 1;
		else cout << setiosflags(ios::fixed) <<setprecision(7) << 0.5;
		cout << " "<< setiosflags(ios::fixed) <<setprecision(7) << (m + 1.0) / (m * 2.0);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值