1 条题解
-
0
#include <iostream> #include <vector> #include <map> #include <algorithm> #include <string> using namespace std; string targetSubject; class Student { public: string name; map<string, int> scores; Student(string n, map<string, int> s) : name(n), scores(s) {} }; bool compareStudents( Student s1, Student s2) { return s1.name < s2.name; } bool cmp(Student s1, Student s2) { if (s1.scores.find(targetSubject) == s1.scores.end() || s2.scores.find(targetSubject) == s2.scores.end()) { int totalScore1 = 0, totalScore2 = 0; for (const auto& score : s1.scores) { totalScore1 += score.second; } for (const auto& score : s2.scores) { totalScore2 += score.second; } if (totalScore1 != totalScore2) return totalScore1 > totalScore2; } else { if (s1.scores.at(targetSubject) != s2.scores.at(targetSubject)) return s1.scores.at(targetSubject) > s2.scores.at(targetSubject); } return s1.name < s2.name; } int main() { int n, m; cin >> n >> m; vector<string> subjects(m); for (int i = 0; i < m; ++i) { cin >> subjects[i]; } vector<Student> students; for (int i = 0; i < n; ++i) { string name; cin >> name; map<string, int> scores; for (int j = 0; j < m; ++j) { int score; cin >> score; scores[subjects[j]] = score; } students.push_back(Student(name, scores)); } cin >> targetSubject; sort(students.begin(), students.end(), cmp); for (const auto& student : students) { cout << student.name << " "; } return 0; } /* 输入 3 2 yuwen shuxue fangfang 95 90 xiaohua 88 95 minmin 100 82 shuxue 输出 xiaohua fangfang minmin */
- 1
信息
- ID
- 37
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 155
- 已通过
- 67
- 上传者