当前位置: 首页 > news >正文

刷题记录:P8804 [蓝桥杯 2022 国 B] 故障 条件概率

传送门:洛谷

题目描述:

题目较长,此处省略
输入:
3 5
30 20 50
0 50 33 25 0
30 0 35 0 0
0 0 0 25 60
1
3
输出:
2 56.89
1 43.11
3 0.00

读完题目,我们会发现其实题目给了我们两个事件,并且这两个事件是相互关联的.因此不难想到使用条件概率

我们将故障原因看做事件AAA,结合题意,我们共有A1,A2,A3...AnA1,A2,A3...AnA1,A2,A3...An
将故障现象看做事件BBB,我们共有B1,B2,B3...BMB1,B2,B3...BMB1,B2,B3...BM
此时事件A是事件B的条件,事件B是事件A的产生现象,那么此时我们就会发现这是一个条件概率.那么对于此题来说,我们知道了所有的P(Ai)P(A_{i})P(Ai),然后又知道了所有的P(Bi∣Ai)P(Bi|Ai)P(BiAi),然后此时我们知道现象去求起因的概率,此时我们需要使用贝叶斯公式

贝叶斯公式:P(A∣B)=P(B∣A)∗P(A)/P(B)=P(A∩B)/P(B)P(A|B)=P(B|A)*P(A)/P(B)=P(A∩B)/P(B)P(AB)=P(BA)P(A)/P(B)=P(AB)/P(B)

结合到本题来说,我们的AAA代表了每一个AiA_{i}Ai,我们的BBB代表的是所有k个故障现象的发生.那么对于我们的P(Ai∩B)P(Ai∩B)P(AiB)来说,就是aiaiai发生的同时,b1...bjb1...bjb1...bj也发生的概率.对于我们的P(B)P(B)P(B)来说,就是无所谓aiaiai发不发生,b1...bjb1...bjb1...bj也发生的概率.

那么显然的我们的P(Ai∩B)=P[Ai]∗P[Ai][Bj]∗(1−P[Ai][Bk])P(Ai∩B)=P[Ai]*P[Ai][Bj]*(1-P[Ai][Bk])P(AiB)=P[Ai]P[Ai][Bj](1P[Ai][Bk])BjBjBj表示发生的现象,BkBkBk表示没发生这个现象
我们的P(B)=∑1nP(Ai∩B)P(B)=\sum_{1}^n{P(Ai∩B)}P(B)=1nP(AiB)

至此,我们的这一道题也就解决了.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define root 1,n,1
#define ls rt<<1
#define rs rt<<1|1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {ll x=0,w=1;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x*w;
}
#define maxn 1000000
const double eps=1e-8;
#define	int_INF 0x3f3f3f3f
#define ll_INF 0x3f3f3f3f3f3f3f3f
int n,m;double p2[200][200];double p1[maxn];double p3[maxn];
int check[maxn];
struct Ans{int a;double b;bool operator < (const Ans &rhs) const {if(b==rhs.b) return a<rhs.a;else return b>rhs.b;}
};
int main() {n=read();m=read();for(int i=1;i<=n;i++) cin>>p1[i];for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {cin>>p2[i][j];}}int k=read();for(int i=1;i<=k;i++) {int num=read();check[num]=1;}double sum=0;for(int i=1;i<=n;i++) {p3[i]=p1[i];for(int j=1;j<=m;j++) {if(check[j]) {p3[i]=p3[i]*p2[i][j]/100;}else {p3[i]=p3[i]*(100-p2[i][j])/100;}}sum+=p3[i];}vector<Ans>ans;for(int i=1;i<=n;i++) {ans.push_back({i,p3[i]/sum});}sort(ans.begin(),ans.end());for(int i=0;i<ans.size();i++) {printf("%d %.2lf\n",ans[i].a,ans[i].b*100);}return 0;
}
http://www.lryc.cn/news/43831.html

相关文章:

  • 【算法】常用的基础数论
  • 云原生场景下的容器网络隔离技术
  • 用python绘制有向图
  • Spring MongoDB 开发教程(一)—官方原版
  • 数据结构——二叉搜索树
  • 23年5月高项学习笔记3---项目管理概述
  • 【组织架构】中国铁路成都局集团有限公司
  • 剧前爆米花--爪哇岛寻宝】java多线程案例——单例模式、阻塞队列及生产者消费者模型、定时器、线程池
  • Guitar Pro8中文版更新说明及系统要求介绍
  • 【id:19】【20分】A. 三数论大小(引用)
  • To_Heart—总结——FWT(快速沃尔什变换)
  • Google巨大漏洞让Win10、11翻车,小姐姐马赛克白打了
  • 腾讯云服务器部署内网穿透(让其他人在不同ip可以访问我们localhost端口的主机项目)(nps开源项目)
  • IDS、恶意软件、免杀技术、反病毒技术、APT、对称加密、非对称加密以及SSL的工作过程的技术介绍
  • 怎么把pdf转换成高清图片
  • MATLAB 系统辨识 + PID 自动调参
  • 【vue3】组合式API之setup()介绍与reactive()函数的使用·上
  • 爬虫Day3 csv和bs4
  • nnAudio的简单介绍
  • 【id:134】【20分】B. 求最大值最小值(引用)
  • Java 面向对象
  • 五、传输层
  • Thinkphp 6.0一对一关联查询
  • 基于51单片机的自动打铃打鸣作息报时系统AT89C51数码管三极管时钟电路
  • 算法详解-双指针算法的魅力-一种简单而高效的编程思想
  • 网页审查元素
  • gpt2 adapter finetune
  • Day14_文件操作
  • leetcode 轮转数组 189
  • Leetcode.1849 将字符串拆分为递减的连续值