1 条题解

  • 0
    @ 2025-3-13 19:29:26
    #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
    上传者