概率计算
Problem
████[数据删除]
Solution
这道题研究的是连续型变量,那么为了描述它在各个数值的概率,我们可以用概率密度函数来描述。那啥是概率密度函数啊?
看度娘给我们的解释:
容易知道P(x≤A)=∫0AP(x),那P(x≥A)怎么办?看看度娘给的第二条性质,那么就有P(x≥A)=1−∫0AP(x)。
那我们来考虑第一个操作对的概率的影响,应该就是
h(x)=f(x)(1−∫0xg(x)dx)+g(x)(1−∫0xf(x)dx)
同样的我们考虑第二个:
h(x)=f(x)∫0xg(x)dx+g(x)∫0xf(x)dx
那么我们维护概率密度函数即可。不知道为什么积分后的函数各项系数还是整数,反正用ll存我们就可以在中间计算时避免精度误差了。
由期望的计算式就有E=∑P(x)x,所以ans=∫01xf(x)dx
注意精度问题。由于double在变量整数部分较大的时候小数部分精度损失严重,我们不妨直接取其小数部分。
Code
#include <algorithm>
#include <iOStream>
#include <cstring>
#include <cstdio>
#include <cmath>
#define rg register
using namespace std;
typedef long long ll;
const int maxn=101;
template <typename Tp> inline int getmin(Tp &x,Tp y){return y<x?x=y,1:0;}
template <typename Tp> inline int getmax(Tp &x,Tp y){return y>x?x=y,1:0;}
template <typename Tp> inline void read(Tp &x)
{
x=0;int f=0;char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') f=1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
if(f) x=-x;
}
struct Poly{
int deg;
ll a[maxn];
Poly(){memset(a,0,sizeof(a));deg=0;}
Poly operator + (const Poly &b)const
{
Poly res;res.deg=max(deg,b.deg);
for(rg int i=0;i<res.deg;i++) res.a[i]=a[i]+b.a[i];
return res;
}
Poly operator - (const Poly &b)const
{
Poly res;res.deg=max(deg,b.deg);
for(rg int i=0;i<res.deg;i++) res.a[i]=a[i]-b.a[i];
return res;
}
Poly operator * (const Poly &b)const
{
Poly res;res.deg=deg+b.deg-1;
for(rg int i=0;i<deg;i++)
for(int j=0;j<b.deg;j++)
res.a[i+j]+=a[i]*b.a[j];
return res;
}
Poly inte()
{
Poly res;res.deg=deg+1;
for(rg int i=deg;i;i--) res.a[i]=a[i-1]/i;
return res;
}
}a,b,fa,fb,st,tmp,sk[100];
int tp,tk,stk[100];
long double ans;
char s[10010];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
st.a[0]=1ll;tmp.a[1]=1ll;
st.deg=1;tmp.deg=2;
while(~scanf("%s",s))
{
cin.getline(s,10000);
ans=0.0;tp=tk=0;
for(rg int i=0;s[i];i++)
{
if(s[i]=='m') stk[++tp]=(s[i+1]=='a'?1:0);
else if(s[i]=='x'&&s[i+1]=='_') sk[++tk]=st;
else if(s[i]==')')
{
a=sk[tk];b=sk[tk-1];tp--;tk--;
fa=a.inte();fb=b.inte();
if(stk[tp+1])
{
sk[tk]=a*fb+b*fa;
}
else
{
fa=st-fa;fb=st-fb;
sk[tk]=a*fb+b*fa;
}
}
}
sk[1]=sk[1]*tmp;
for(rg int i=sk[1].deg;i;i--)
{
ans+=1.0*(sk[1].a[i-1]%i)/i;
if(ans>=1.0) ans-=1.0;
if(ans<0.0) ans+=1.0;
}
printf("%.6Lf\n",ans);
}
return 0;
}
相关阅读
前言: 对于统计学,只是本人的浅谈,还请各位指教. 概率论研究什么呢? 随机现象:不确定性与统计规律性 概率论—研究和揭示随机
数据分析能做什么呢?它能更好的解决问题,但同样的它也有很多的坑,那么我们要如何避开这些坑呢?前言说实话,数据分析是人人都会的,只是没
百度竞价,就是百度上投广告,销售产品的方式。百度竞价因为涉及的因素很多,又是烧广告费,所以对新人来说,门槛比较高,赚钱也比较难。所以
目录 第一节 离散.连续.多维随机变量及其分布 1.1、几个基本概念点 1..2、随机变量及其分布 第二节、从数学期望、方差、协方
概率是度量一件事发生的可能性,它是介于0到1之间的数值。我们抛一枚硬币,它有正面朝上和反面朝上两种结果,通常用样本空间S表示,S={正