概率
基本事件定义:指试验中可能出现的一个结果
- 必然事件
定义:在此次试验中,必然发生的事件,即其\(P\)值为\(100\%\)
- 不可能事件
定义:在此次试验中,不可能发生的事件,其\(P\)值为\(0\)
- 随机事件
定义:在此次试验中,可能发生也可能不发生的事件,其\(0 \leqslant P \leqslant 1\)(当\(P=1\)时是必然事件,当\(P=0\)时是不可能事件)
概率定义:指一个随机事件发生的概率,通常用\(P(A)\)表示\(A\)事件发生的概率
其他事件定义(指几个互相有关联的事件)
- 等可能事件:在一次试验中,它由\(n\)个基本事件组成,且每个基本事件发生的概率都是相等的,那么我们称这\(n\)个事件为等可能事件
- 互斥事件:在一次试验中,由两个随机事件\(A,B\),若\(A\)发生,则\(B\)不可能发生,若\(B\)发生,则\(A\)不可能发生,我们称它们为互斥事件(即\(P(A \cap B)= \empty\),表示\(A,B\)不可能同时发生,\(\empty\)表示空集的意思)
- 对立(互补)事件:在一次试验中,若在\(A,B\)事件中,\(A和B\)必然有一个且只有一个发生,那么我们称它们为对立(互补)事件(即\(P(A \cup B)=S\),且\(P(A \cap B)=\empty\),表示\(A,B\)中任意发生一个的事件存在与这个试验的所有集合里面,但\(A,B\)不能同时发生)
(注意互斥事件与对立事件的区别)
- 和事件:\((A \cup B)\)称为\(A,B\)的和事件,表示\(A,B\)中任意发生一个的概率,有\(P(A \cup B)=P(A)+P(B)-P(A \cap B)\)
- 积事件:\((A \cap B)\)称为\(A,B\)的积事件,表示\(A,B\)同时发生的概率,如果\(A,B\)互不干扰,有\(P(A \cap B)=P(A)*P(B)\)
概率的性质
- 非负性:即\(0 \leqslant P(A) \leqslant 1\)
- 如果\(A,B\)互为对立事件,则\(P(A)+P(B)=1\)
- 一个重要的知识点伯努利大数定理(待补)
期望
定义:是试验中每次可能结果的概率乘以其结果的总和
计算:我们设\(A_1,A_2...A_n\)表示\(n\)种事件出现的概率,\(P_1,P_2...P_n\)表示这\(n\)种事件的值,则对于事件\(X\)的期望值\(E(X)=\sum_{i=1}^{n}A_iP_i\)
概率与期望应用
Codeforces Round #730 (Div. 2)——C. Need for Pink Slips(题目)
题目大意:有三个数\(c,m,p\),抽中他们的概率分别为\(P_c,P_m,P_p\),抽到\(p\)游戏结束,抽到\(c或m\),将其概率减\(v(不足则减本身)\),然后平均分配到其他两个数上(若概率为\(0\)则不分,放到另一个身上),问游戏轮数的数学期望
分析:暴力\(dfs\)模拟即可,注意\(double\)精度判断问题
代码实现:
#include<bits/stdc++.h>
using namespace std;
int t;
double c,m,p,v,mans;
void dfs(double c,double m,double p,double v,double s,int j)
{
// printf("%.6lf %.6lf %.6lf %.6lf %.6lf\n",c,m,p,v,s);
// printf("dfs : %.6lf %.6lf\n",p*s*1.000000,s);
mans+=p*s*1.000000*j;
double g;
if (c-0>=0.0000001)
{
if (c>=v) g=v;
else g=c;
c-=g;
if (m-0>=0.0000001) m+=g/2;
else p+=g/2;
if (p-0>=0.0000001) p+=g/2;
else m+=g/2;
dfs(c,m,p,v,s*(c+g),j+1);
c+=g;
if (m-g/2==0) p-=g/2; else m-=g/2;
if (p-g/2==0) m-=g/2; else p-=g/2;
}
if (m-0>=0.0000001)
{
if (m>=v) g=v;
else g=m;
m-=g;
if (c-0>=0.0000001) c+=g/2;
else p+=g/2;
if (p-0>=0.0000001) p+=g/2;
else c+=g/2;
dfs(c,m,p,v,s*(m+g),j+1);
if (c-g/2==0) p-=g/2; else c-=g/2;
if (p-g/2==0) c-=g/2; else p-=g/2;
}
}
int main()
{
cin >> t;
while (t--)
{
mans=0;
cin >> c >> m >> p >> v;
dfs(c,m,p,v,1,1);
printf("%.6lf\n",mans);
}
}