Mr.W


私信TA

用户名:uq_17130651193

访问量:387

签 名:

等  级
排  名 44670
经  验 290
参赛次数 1
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

贝叶斯乱搞
浏览:341

解题思路:
妥妥的贝叶斯公式套一套即可得出答案,不过要先算出在所有故障发生的情况下对应故障原因所发生的概率是多少,可以通过给出的发生了故障的情况去计算,若某个故障现象发生了,那么直接用输入的概率即可,若没发生则使用相反概率(即用1减去)即可。


其他的就看公式自己套一套就行。


参考代码:

#include <bits/stdc++.h>
#define ld long double
using namespace std;

const int N = 45, M = 25;
int n, m, k;
int p[N], pp[N][M];
pair<ld, int> ppp[N];
bool happen[M];

int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> p[i];

  for (int i = 1; i <= n; i++) {
    ppp[i].second = i;
    for (int j = 1; j <= m; j++) {
      cin >> pp[i][j];
    }
  }

  cin >> k;
  for (int i = 0, x; i < k; i++) {
    cin >> x;
    happen[x] = true;
  }

  ld s = 0;
  for (int i = 1; i <= n; i++) {
    ld &x = ppp[i].first;
    x = p[i] / 100.0;
    for (int j = 1; j <= m; j++) {
      if (happen[j]) x *= pp[i][j] / 100.0;
      else x *= (100 - pp[i][j]) / 100.0;
    }
    s += x;
  }

  sort(ppp + 1, ppp + n + 1, [&](pair<ld, int> a, pair<ld, int> b) {
    if (a.first == b.first) return a.second < b.second;
    return a.first > b.first;
  });
  
  for (int i = 1; i <= n; i++) {
    printf("%d %.2Lf\n", ppp[i].second, !s ? 0.0 : ppp[i].first * 100 / s);
  }

  return 0;
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区