题目连接:https://www.luogu.com.cn/problem/P3802
题目大意:
有 (a_1) 个 (1),(a_2) 个 (2),(cdots),(a_7) 个 (7),现在要将这些数拼成一个序列,问:序列中出现连续的 (7) 个数都不同的期望次数?
解题思路(参考自 https://www.luogu.com.cn/blog/orangebird/solution-p3802):
设 (n = sum a_i),
对于每一位 (i) ,从 (i) 开始的连续 (7) 位值都不同的概率是
[7! imes frac{a_1}{n} imes frac{a_2}{n-1} imes frac{a_3}{n-2} imes frac{a_4}{n-3} imes frac{a_5}{n-4} imes frac{a_6}{n-5} imes frac{a_7}{n-6}
]
因为一共存在 (n-6) 个这样的位置 (i) ,所以在乘以 (n-6) 得到答案为:
[7! imes frac{a_1}{n} imes frac{a_2}{n-1} imes frac{a_3}{n-2} imes frac{a_4}{n-3} imes frac{a_5}{n-4} imes frac{a_6}{n-5} imes a_7
]
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
double a[8], n, ans = 1;
int main() {
for (int i = 1; i <= 7; i ++) {
scanf("%lf", a+i);
ans *= i * a[i];
n += a[i];
}
for (int i = 0; i < 6; i ++)
ans /= n-i;
printf("%.3lf
", ans);
return 0;
}