题目连接: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! \times \frac{a_1}{n} \times \frac{a_2}{n-1} \times \frac{a_3}{n-2} \times \frac{a_4}{n-3} \times \frac{a_5}{n-4} \times \frac{a_6}{n-5} \times \frac{a_7}{n-6}\]
因为一共存在 \(n-6\) 个这样的位置 \(i\) ,所以在乘以 \(n-6\) 得到答案为:
\[7! \times \frac{a_1}{n} \times \frac{a_2}{n-1} \times \frac{a_3}{n-2} \times \frac{a_4}{n-3} \times \frac{a_5}{n-4} \times \frac{a_6}{n-5} \times 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\n", ans);
return 0;
}
原文:https://www.cnblogs.com/quanjun/p/12260617.html