题意:
有2n个人,有两种汉堡a,b;各n个;
现在每个人都取一个汉堡,取之前投硬币,确定拿那种(50%概率);但是如果只剩一种汉堡就不用投了;
问最后两个人拿到一样的汉堡的概率;
思路:
首先我们可以求最后两个人拿不一样汉堡的概率,因为如果最后两个人拿不一样,则前面所有人都有投硬币,更好算;
那么如果最后两个人拿不一样的汉堡,那么前面则拿两种汉堡的人相等;
如果只有2个人,那么他们拿不一样汉堡的概率肯定是1;如果四个人呢,就要求前面两个人拿不一样的汉堡,而如果6个人,要要求前面四个人,两个两个拿一样;
可以推出一个公式p[i + 1] = (1 - 0.5 / i) * p[i];
#include<cstdio>
#include<cstring>
const int N = 50005;
int n;
double p[N];
void init(){
p[1] = 1.0;
for(int i = 1 ; i < N ; i++) {
p[i + 1] = (1 - 0.5 / i) * p[i];
}
}
int main() {
init();
int t;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
printf("%.4lf\n",1 - p[n / 2]);
}
}