智能成绩表
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Student {string name;vector<int> scores;int totalScore;
Student(string n, vector<int> s) : name(n), scores(s), totalScore(0) {
for (int score : scores) {
totalScore += score;
}
}
};
bool compareStudents(Student& a, Student& b) {
if (a.totalScore != b.totalScore) {return a.totalScore > b.totalScore;}else {return a.name < b.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;
vector<int> scores(m);
for (int j = 0; j < m; ++j) {
cin >> scores[j];
}
students.push_back(Student(name, scores));
}
string rankSubject;
cin >> rankSubject;
int rankIdx = -1;
for (int i = 0; i < m; ++i) {
if (subjects[i] == rankSubject) {
rankIdx = i;
break;
}
}
if (rankIdx == -1) {
sort(students.begin(), students.end(), compareStudents);
}
else {
sort(students.begin(), students.end(), [rankIdx](const Student& a, const Student& b) {
if (a.scores[rankIdx] != b.scores[rankIdx]) {
return a.scores[rankIdx] > b.scores[rankIdx];
}
else {
return a.name < b.name;
}
});
}
for (const auto& student : students) {
cout << student.name << " ";
}
return 0;
}
#机械/制造每日一题#