题面
题意
m
m
面的骰子
求连续出现个相同面的期望次数
或者
求连续出现
n
n
个不同面的期望次数
Sol
设表示已经出现了
i
i
~这些面相同的期望次数
g[i]
g
[
i
]
指
i
i
~这些面不同的期望次数
那么显然有
然后差分一下即错位相减
就可以求出相邻两段的差值的关系
而
f[1]−f[0]=1
f
[
1
]
−
f
[
0
]
=
1
且
g[1]−g[0]=1
g
[
1
]
−
g
[
0
]
=
1
就可以推出来所有的东西了
# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
int T, op;
double n, m;
IL void Calc1(){
RG double tp = 1, ans = 0;
for(RG int i = 1; i <= n; ++i) ans += tp, tp *= m;
printf("%.10lf\n", ans);
}
IL void Calc2(){
RG double tp = 1, ans = 0;
for(RG int i = 1; i <= n; ++i) ans += tp, tp *= m / (m - i);
printf("%.10lf\n", ans);
}
int main(RG int argc, RG char *argv[]){
while(scanf("%d", &T) != EOF){
for(RG int i = 1; i <= T; ++i){
scanf("%d%lf%lf", &op, &m, &n);
!op ? Calc1() : Calc2();
}
}
return 0;
}