1012 The Best Rank (25分)
分析
依次对各个成绩排序,并按照优先级选取最高排名
代码
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
vector<pair<int, vector<int> > >rcd;
map<int, vector<int> >rnk;
int n, m, a;
char c[4] = { 'A','C','M','E' };
bool cmp(pair<int, vector<int> >x, pair<int, vector<int> >y) {
return x.second[a] > y.second[a];
}
int main() {
scanf_s("%d %d", &n, &m);
while (--n >= 0) {
scanf_s("%d", &a);
vector<int> v(4);
for (int i = 1; i < 4; ++i)scanf_s("%d", &v[i]);
v[0] = (v[1] + v[2] + v[3]) / 3;
rcd.push_back(pair<int, vector<int> >(a, v));
}
for (a = 0; a < 4; ++a) {
sort(rcd.begin(), rcd.end(), cmp);
rnk[rcd[0].first].push_back(1);
for (int i = 1; i < rcd.size(); ++i) {
if (rcd[i].second[a] == rcd[i - 1].second[a])rnk[rcd[i].first].push_back(rnk[rcd[i - 1].first][a]);
else rnk[rcd[i].first].push_back(i + 1);
}
}
while (--m >= 0) {
scanf_s("%d", &a);
if (rnk[a].size() == 0)printf("N/A\n");
else {
int d = 999999999, k;
for(int i=0;i<4;++i)
if (d > rnk[a][i]) {
d = rnk[a][i];
k = i;
}
printf("%d %c\n", d, c[k]);
}
}
return 0;
}