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;
}


原文地址:https://www.cnblogs.com/clever-sheep/p/12811549.html