题目链接: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
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; }
Problem I: no2
Time Limit: 1 Sec Memory Limit: 32 MB
Submit: 342 Solved: 23
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
时间: 2024-11-05 21:56:41