小魔女帕琪
有a1,a2,...,a7a1,a2,...,a7个对应的1,2,...,7进行排列,询问其中出现1,2,...,7的全排列的个数的期望,a1+a2+a3+a4+a5+a6+a7<=10^9。
解
显然数据范围不支持递推方程,于是猜测为条件概率问题,即前后概率发生有联系,通常相等,于是设其中一个状态,不妨设在第n个位置到最后一个位置,出现了一次1234567的全排列期望,为(设此时有12..7,a1,...,a7个,其和为n)
7!∏7i=1ai∏7i=1(n−i+1)
在考虑n+1个位置出现全排列的期望,不难得知有
7!(a1−1)∏7i=1ai∏7i=1(n−i+1)
7!(a2−1)∏7i=1ai∏7i=1(n−i+1)
....
累加我们有
7!(a1−1+a2−1+...+a7−1)∏7i=1ai∏7i=1(n−i+1)=
7!∏7i=1ai∏7i=1(n−i+1)
于是我们得知任何一个位置到终点的期望与下一个位置到终点的期望都相同,根据数学归纳法,当然递归更好理解,于是我们得知任何一个地方出现全排列概率都是相同的。
于是
ans=7!∏7i=1ai∏7i=1(n−i+1)(n−7+1)=
7!∏7i=1ai∏6i=1(n−i+1)
代入式子计算即可。
参考代码:
#include <iostream>
#include <cstdio>
#define il inline
#define ri register
using namespace std;
double a[7];
int main(){
ri int i,n(0);double ans(1);
for(i=0;i<7;++i)
scanf("%lf",&a[i]),n+=a[i];
for(i=0;i<6;++i)
ans*=a[i],ans*=(i+1),ans/=(n-i);
ans*=a[i],ans*=(i+1);
printf("%.3lf",ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!