题目
描述太不清晰
代码
#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);
}
}