http://codeforces.com/gym/102700/problem/N
gym102700N
题意
给一个长为n的序列
p
1
,
p
2
,
…
…
,
p
n
p_1,p_2,……,p_n
p1,p2,……,pn,其中
p
i
p_i
pi为第
i
i
i次操作成功的概率,现在将序列随机打乱,求操作失败次数的期望。
说明
题意等价于对序列的每个排列求失败次数期望然后取平均值,但是我现在不会写,下面是搬运的代码。
http://codeforces.com/gym/102700/submission/94439791
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d", &n);
vector <double> r(n + 1, 0.0);
r[0] = 1.0;
for(int i = 0; i < n; i++){
double p;
scanf("%lf", &p);
for(int j = n; j >= 1; j--)
r[j] = r[j - 1] * p + r[j] * (1.0 - p);
r[0] = r[0] * (1.0 - p);
}
double res = 0.0;
for(int i = 0; i <= n; i++)
res += r[i] * (n - i) / (i + 1);
printf("%.12f\n", res);
return 0;
}