P3802 小魔女帕琪

\(\color{#000088} {东方众不请自来。。。}\)

题意:

洛谷链接

帕琪有七种元素,第 \(i\) 个元素有 \(a_i\) 个,帕琪将所有元素排成一排,若有任意连续的 \(7\) 个元素互不相同(就是啥元素都有),就能释放魔法把蕾米淦翻。现在给你每个元素数量,问随机将元素排开期望能淦蕾米多少次。

注意是任意 \(7\) 个连续的,同一个元素在前 \(7\) 个中能组成,在后 \(7\) 个中也能组成,就算释放两次。如:\(12345671\),即可释放两次。


纯数学题,想清题解后代码很好写。

总共期望释放几次 \(=\sum\) 每个位置期望释放几次,当然每个位置只能释放一次。。。就是每个位置可释放的概率。

考虑到由于上一次是否释放对下一次没有任何影响,所以每个位置释放的概率都是独立的。

再思考会发现每个位置其实概率是一样的,因为都是在整个序列中连续的 \(7\) 个数,只是初始位置和结束位置不同而已。如果将这连续的 \(7\) 个数绑在一起,其他的元素全部散开,可以想到无论这 \(7\) 个放在哪里,概率都是相同的。

那么我们只需计算:长度为 \(n\) 的序列,选定的 \(7\) 个数互不相同的概率,答案乘上 \(n-6\) (有 \(n-6\) 个可能释放的位置)。

但这 \(7\) 个数即使绑在一起他们之间的位置也不确定,既然这 \(7\) 个数互不相同,我们可以当做排列处理,将排好顺序的情况数乘上 \(7!\) ,就是位置不确定的情况。

现在问题变成了小学奥数。。。: \(n\) 个数中选出 \(7\) 个数,第一个数是 \(1\),第二个数是 \(2\),第三个数是 \(3\) 。。。的情况数。即 \(\frac {a_1}{n}*\frac {a_2}{n-1}*\frac {a_3}{n-2}*\frac {a_4}{n-3}*\frac {a_5}{n-4}*\frac {a_6}{n-5}*\frac {a_7}{n-6}\)

综上:\(Ans = (n-6)*(7!)*\frac {a_1}{n}*\frac {a_2}{n-1}*\frac {a_3}{n-2}*\frac {a_4}{n-3}*\frac {a_5}{n-4}*\frac {a_6}{n-5}*\frac {a_7}{n-6}\)

\(Ans=5040*\frac {a_1}{n}*\frac {a_2}{n-1}*\frac {a_3}{n-2}*\frac {a_4}{n-3}*\frac {a_5}{n-4}*\frac {a_6}{n-5}*a_7\)

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#define QWQ cout<<"QwQ"<<endl;
#define ll long long
#include <vector>
#include <queue>
#include <stack>
#include <map>
using namespace std;
const int N=201010;
const int qwq=303030;
const int inf=0x3f3f3f3f;

double a[2333],tot;
double ans = 5040.0;

int main() {
	for(int i=1;i<=7;i++) scanf("%lf",&a[i]), tot += a[i];
	for(int i=1;i<=7;i++) if(!a[i]) { cout<<"0.000"; return 0; }
	for(int i=1;i<=7;i++) ans = ans * a[i] / (tot-i+1);
	ans *= tot-6;
	printf("%.3lf",ans);
	return 0;
}


posted @ 2020-04-30 22:35  maple276  阅读(137)  评论(0编辑  收藏  举报