【故障——条件概率】

题目

描述太不清晰

代码

#include <bits/stdc++.h>
using namespace std;
using db = double;

int a, b, k; // a<=40 b <=20
int pa[45], pab[45][25], npab[45][25]; //故障,故障下现象,故障下不现象
db pb, awb[45]; //现象,故障且现象
bool st[25]; //现象是否发生

struct node
{
	db p;
	int i;
	bool operator < (const node &t) const
	{
		if(fabs(p - t.p) > 1e-6) return p > t.p;
		return i < t.i;
	}
};

vector<node> ans;
int main()
{
	scanf("%d%d", &a, &b);
	for(int i = 1; i <= a; i++)
		scanf("%d", pa+i);
	for(int i = 1; i <= a; i++)
		for(int j = 1; j <= b; j++)
			scanf("%d", &pab[i][j]), npab[i][j] = 100 - pab[i][j];
	
	scanf("%d", &k);
	for(int i = 1; i <= k; i++)
	{
		int x;
		scanf("%d", &x);
		st[x] = 1;
	}
	
	for(int i = 1; i <= a; i++)
	{
		awb[i] = pa[i];
		for(int j = 1; j <= b; j++)
		{
			if(st[j]) awb[i] = awb[i] * pab[i][j] / 100;
			else awb[i] = awb[i] * npab[i][j] / 100;
		}
		pb += awb[i];
	}
		
	for(int i = 1; i <= a; i++)
		ans.push_back({awb[i] * 100 / pb, i});
	
	sort(ans.begin(), ans.end());
	
	for(node u : ans)
	{
		int i = u.i;
		db p = u.p;
		printf("%d %.2lf\n", i, p);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值