#include <stdio.h>
#include <algorithm>
#include <math.h>
int n, m, k, P[40][21];
struct node {
double p;
int i;
inline bool operator<(const node &nd) const {
return p == nd.p ? i < nd.i : p > nd.p;
}
} ans[40];
int main() {
scanf("%d %d", &n, &m);
for (int i = 0; i < n; ++i)
scanf("%d", P[i]), ans[i].i = i + 1;
for (int i = 0; i < n; ++i)
for (int j = 1; j <= m; ++j)
scanf("%d", &P[i][j]), P[i][j] = 100 - P[i][j];
scanf("%d", &k);
for (int g = 0, j; g < k; ++g) {
scanf("%d", &j);
for (int i = 0; i < n; ++i)
P[i][j] = 100 - P[i][j];
}
double tmp = 0;
for (int i = 0; i < n; ++i) {
ans[i].p = *P[i] / 100.0;
for (int j = 1; j <= m; ++j)
ans[i].p *= P[i][j] / 100.0;
tmp += ans[i].p;
}
std::sort(ans, ans + n);
for (int i = 0; i < n; ++i)
printf("%d %.2lf\n", ans[i].i, !tmp ? 0.0 : 100 * ans[i].p / tmp);
}
第 5 行中定义了二维数组 P。
但在第 30 行(倒数第 9 行)中却用到了 *P[i] 并进行了运算。
实测编译可以通过,求问 dalao 为什么。