PAT - 1012 The Best Rank 充分利用容器,精准而优雅~
The Best Rank (25)
http://www.nowcoder.com/questionTerminal/5a5281aef52a4f6f943929c05ba71c11
#include < iostream> #include < map> #include < vector> #include < string> using namespace std; map<string, map<int, vector<char>>> database; map<int, vector<string>, greater<int>> math; map<int, vector<string>, greater<int>> cprogramming; map<int, vector<string>, greater<int>> english; map<int, vector<string>, greater<int>> average; int main(){ int n; int m; cin >> n; cin >> m; string id; int mathGrade; int cprogrammingGrade; int englishGrade; for(int i = 0; i < n; i++){ cin >> id; cin >> cprogrammingGrade; cin >> mathGrade; cin >> englishGrade; cprogramming[cprogrammingGrade].push_back(id); math[mathGrade].push_back(id); english[englishGrade].push_back(id); int averageGrade = (mathGrade + cprogrammingGrade + englishGrade) / 3; average[averageGrade].push_back(id); } int count = 1; for(map<int, vector<string>>::iterator it = average.begin(); it != average.end(); ++it){ int tieCount = 0; for(vector<string>::iterator itr = it->second.begin(); itr != it->second.end(); ++itr){ database[*itr][count].push_back('A'); //cout << "push A=" << it->first << "at" << distance(average.begin(), it) + 1 << endl; tieCount++; } count += tieCount; } count = 1; for(map<int, vector<string>>::iterator it = cprogramming.begin(); it != cprogramming.end(); ++it){ int tieCount = 0; for(vector<string>::iterator itr = it->second.begin(); itr != it->second.end(); ++itr){ database[*itr][count].push_back('C'); tieCount++; } count += tieCount; } count = 1; for(map<int, vector<string>>::iterator it = math.begin(); it != math.end(); ++it){ int tieCount = 0; for(vector<string>::iterator itr = it->second.begin(); itr != it->second.end(); ++itr){ database[*itr][count].push_back('M'); tieCount++; } count += tieCount; } count = 1; for(map<int, vector<string>>::iterator it = english.begin(); it != english.end(); ++it){ int tieCount = 0; for(vector<string>::iterator itr = it->second.begin(); itr != it->second.end(); ++itr){ database[*itr][count].push_back('E'); tieCount++; } count += tieCount; } for(int i = 0; i < m; i++){ cin >> id; if(database.count(id)){ cout << database[id].begin()->first << " " << database[id].begin()->second[0] << endl; }else{ cout << "N/A" << endl; } } return 0; }```