题意:
假设一个骰子有n个面,询问经过多次后可以使得每个面都朝上过一次。求步骤的期望
思路:
很类似于
LightOJ 1038 | Race to 1 Again |
对于还未投时,任何一面都未出现过,因此 ans +1
之后对于有n个面的骰子来说
在出现第i个未出现的面的时候:
利用等比求和,可以的 1/(1-(i-1)/n)
分子的减法在n趋近无穷时忽略
q = (i-1)/n,表示出现前i-1个面的概率
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
const int maxn=10005;
int main()
{
int t;
scanf("%d",&t);;
for(int cs=1;cs<=t;cs++)
{
int n,m;
scanf("%d%d",&n,&m);
double ans=1;
printf("Case %d: ",cs);
if(n&1)
{
printf("0\n");
}
else
{
if(n==0)
ans=1;
while(n!=0)
{
ans*=(n-1)*1.0/(n+1);
n-=2;
}
printf("%.6lf\n", ans);
}
}
return 0;
}