2015浙工大校赛- Problem I: no2(概率题,贝叶斯公式)

博客介绍了如何运用贝叶斯公式解决一个实际的僵尸病概率问题。通过两次检测的数据,计算出最终得病的概率。首先计算第一次检测后得病的概率X,然后用X代入公式结合第二次检测的数据得出最终答案。
摘要由CSDN通过智能技术生成

题目链接:http://acm.zjut.edu.cn/onlinejudge/problem.php?cid=1101&pid=8


题面:



Problem I: no2

Time Limit: 1 Sec   Memory Limit: 32 MB
Submit: 342   Solved: 23
[ Submit][ Status][ Web Board]

Description

已知有个市有n人,得了僵尸病的概率是p。你去参加了检测,检查出来是阳性。医生告诉你这次检测,得病的人检测出阳性的概率是r11,没得病的人检测出阳性的概率是r12。然后,为了保险起见,医生给你用了更好的药来检测,这次是阴性,这种药得病的人检测出阳性的概率是r21,没得病的人检测出来是阳性的概率r22。请问,你现在得病的概率是多少

Input

每行依次输入n,p,r11,r12,r21,r22

Output

每行输出概率,保留6位小数

Sample Input

1000 0.01 1 1 1 0

Sample Output

0.000000


题解:

概率论已经还给老师了,囧,知道是贝叶斯公式,却不记得了,最后还是臆想出来了!!

贝叶斯公式:


P(Ai|B)=P(B|Ai)P(Ai)/∑(P(B|Aj)P(Aj)) = P(B|Ai)P(Ai)/P(B)


臆想:

    应该和贝叶斯差不多吧。
    先算出第一种检测得病的概率为X,不得病的概率为1-X。然后用X代替P,再和第二次的数据计算一次,即为结果。


公式:
    x=r1*p/(r1*p+(1-p)*r2);
    ans=x*(1-r3)/(x*(1-r3)+(1-x)*(1-r4));

代码:

#include <iostream>  
#include <cstring>  
#include <cstdio>  
#include <string>  
#include <iomanip>  
#include <vector>  
#include <map>  
#include <set>  
#include <algorithm>  
#include <queue>  
#include <cmath>  
using namespace std;  
  
int main() 
{ 
    int n; 
    double p,r1,r2,r3,r4,ans,x1,x2; 
    while(cin>>n>>p>>r1>>r2>>r3>>r4) 
    { 
        x1=r1*p/(r1*p+(1-p)*r2);
		ans=x1*(1-r3)/(x1*(1-r3)+(1-x1)*(1-r4));
        cout<<fixed<<setprecision(6)<<ans<<endl; 
    } 
    return 0; 
} 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值