#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
#include <set>
struct Submission {
int hour, minute, second;
char problem;
std::string team;
std::string verdict;
};
bool compareSubmissions(const Submission& s1, const Submission& s2) {
if (s1.hour == s2.hour) {
if (s1.minute == s2.minute) {
if (s1.second == s2.second) {
if (s1.team == s2.team) {
return s1.problem < s2.problem;
}
return s1.team < s2.team;
}
return s1.second < s2.second;
}
return s1.minute < s2.minute;
}
return s1.hour < s2.hour;
}
int main() {
int n, m, k;
std::cin >> n >> m >> k;
std::vector<Submission> submissions(k);
for (int i = 0; i < k; ++i) {
std::string time, problem, team, verdict;
std::cin >> time >> problem >> team >> verdict;
int hour = stoi(time.substr(0, 2));
int minute = stoi(time.substr(3, 2));
int second = stoi(time.substr(6, 2));
submissions[i] = {hour, minute, second, problem[0], team, verdict};
}
std::sort(submissions.begin(), submissions.end(), compareSubmissions);
std::unordered_map<std::string, std::set<char>> acceptedProblems;
std::unordered_map<std::string, int> penalties;
for (const Submission& submission : submissions) {
if (submission.verdict == "Accepted") {
acceptedProblems[submission.team].insert(submission.problem);
}
if (acceptedProblems.find(submission.team) == acceptedProblems.end()) {
penalties[submission.team] += 20;
}
}
std::vector<std::string> rollingBoard;
for (const Submission& submission : submissions) {
if (submission.hour >= 4) {
break;
}
if (acceptedProblems[submission.team].find(submission.problem) != acceptedProblems[submission.team].end()) {
acceptedProblems[submission.team].erase(submission.problem);
if (acceptedProblems[submission.team].empty()) {
acceptedProblems.erase(submission.team);
}
penalties[submission.team] += (submission.hour * 60) + submission.minute;
std::vector<std::pair<int, std::string>> rankings;
for (const auto& penalty : penalties) {
rankings.push_back({penalty.second, penalty.first});
}
std::sort(rankings.begin(), rankings.end());
int rank = 1;
for (int i = rankings.size() - 1; i >= 0; --i) {
if (rankings[i].second == submission.team) {
break;
}
rank++;
}
if (rank <= m) {
rollingBoard.push_back(submission.team);
}
} else {
penalties[submission.team] += 20;
}
}
for (const std::string& team : rollingBoard) {
std::cout << team << std::endl;
}
return 0;
}
下面的C++字符不是程序了啊
#inclue<iostream>
using namespace std;
int main(){
cout<<"反正我没看出啥问题"<<endl;
return 0;
}