题目
![]()
解法1
点击查看代码
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
struct Student {
string id;
int c, m, e, a;
};
bool cmpA(const Student &s1, const Student &s2) {
return s1.a > s2.a;
}
bool cmpC(const Student &s1, const Student &s2) {
return s1.c > s2.c;
}
bool cmpM(const Student &s1, const Student &s2) {
return s1.m > s2.m;
}
bool cmpE(const Student &s1, const Student &s2) {
return s1.e > s2.e;
}
int main() {
int n, m;
cin >> n >> m;
vector<Student> students(n);
unordered_map<string, int> idToIndex;
for (int i = 0; i < n; i++) {
cin >> students[i].id >> students[i].c >> students[i].m >> students[i].e;
students[i].a = (students[i].c + students[i].m + students[i].e) / 3;
idToIndex[students[i].id] = i;
}
vector<Student> sortedByA = students;
vector<Student> sortedByC = students;
vector<Student> sortedByM = students;
vector<Student> sortedByE = students;
sort(sortedByA.begin(), sortedByA.end(), cmpA);
sort(sortedByC.begin(), sortedByC.end(), cmpC);
sort(sortedByM.begin(), sortedByM.end(), cmpM);
sort(sortedByE.begin(), sortedByE.end(), cmpE);
for (int i = 0; i < m; i++) {
string id;
cin >> id;
if (idToIndex.find(id) == idToIndex.end()) {
cout << "N/A" << endl;
continue;
}
int index = idToIndex[id];
int rankA = 1, rankC = 1, rankM = 1, rankE = 1;
for (int j = 0; j < n; j++) {
if (sortedByA[j].a > students[index].a) rankA++;
if (sortedByC[j].c > students[index].c) rankC++;
if (sortedByM[j].m > students[index].m) rankM++;
if (sortedByE[j].e > students[index].e) rankE++;
}
if (rankA <= rankC && rankA <= rankM && rankA <= rankE) {
cout << rankA << " A" << endl;
} else if (rankC <= rankA && rankC <= rankM && rankC <= rankE) {
cout << rankC << " C" << endl;
} else if (rankM <= rankA && rankM <= rankC && rankM <= rankE) {
cout << rankM << " M" << endl;
} else {
cout << rankE << " E" << endl;
}
}
return 0;
}