2697 问题 E: 蓝桥杯2022年第十三届决赛真题-故障

时间限制: 1s 内存限制: 256MB 提交: 1030 解决: 300
题目描述

在软件或系统开发中,我们会遇到各种各样的故障。为了从故障现象反推故障原因,工程师们会总结一种叫做相关性矩阵的二维表格,来表示故障原因与故障现象之间的关系。比如:

蓝桥杯2022年第十三届决赛真题-故障

其中每行表示一种故障原因,每一列表示一种故障现象。该矩阵表示故障原因 A 可能产生故障现象 2、3、4,故障原因 B 可能产生故障现象 1、3。 

在实际开发过程中,如果出现了故障原因,工程师就可以根据故障现象,去计算每种故障原因产生的概率,并按照概率大小对故障原因进行排查,以达到快速定位故障原因的目的。

现在,我们假设系统开发中同一时间只会出现一种故障原因,并且故障原因引起各故障现象是独立事件。举个例子来说:

假设系统现在发生了故障原因 A,有 1/3 的概率出现故障现象 2,有 1/4 的概率出现故障现象 3,有 1/2 的概率出现故障现象 4。由于 3 种现象是独立发生的,因此有的概率同时出现故障 2、3、4。

约定若相关性矩阵中没有 ‘x’ 记号,则表示该故障原因一定不会产生某故障现象,比如故障原因 A,一定不会产生故障现象 1。

根据历史经验数据,我们统计得到了每一种故障原因出现的概率以及每一 种故障原因对应的故障现象产生概率。

现在已知系统出现的故障现象,求问各个故障原因发生的概率。

输入

第 1 行:2 个正整数 N, M,N 表示故障原因的个数(编号 1 . . . N),M 表示故障现象的个数(编号 1 . . . M).

第 2 行:N 个整数,第 i 个数表示故障原因 i 产生的概率 Pi .

第 3 . . . N + 2 行:每行 M 个整数,第 i + 2 行第 j 个整数 Pij 表示故障原因 i 出现故障现象 j 的概率(百分比).

第 N + 3 行:1 个正整数 K,表示目前出现的故障现象数量。

第 N + 4 行:K 个正整数,依次为当前出现的故障现象编号,不会重复。

输出
第 1 . . . N 行:按概率从高到低输出每种故障原因及其可能的概率,若出现概率相同则优先输出编号小的故障原因。第 1 个数为故障原因编号,第 2 个数为故障概率(百分比),保留 2 位小数。
样例输入
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
提示
对于所有测试用例,1 ≤ N ≤ 40, 1 ≤ M ≤ 20, 0 ≤ Pi ≤ 100, ∑ (Pi) = 100, 0 ≤ Pij ≤ 100.

比赛公告

1. 对于编程题目,要求选手给出的解答完全符合 GNU C/C++ 标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的 API。

2. 代码中允许使用 STL 类库。

3. main 函数结束必须返回 0。

4. 所有依赖的函数必须明确地在源文件中 #include

5. 提交时,注意选择使用C或C++语言。