【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;
}

猜你喜欢

转载自blog.csdn.net/qq_37406764/article/details/81129507